cm-admin 1.5.33 → 1.5.35

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/app/assets/stylesheets/cm_admin/base/auth.scss +0 -2
  4. data/app/assets/stylesheets/cm_admin/base/cardView.scss +0 -3
  5. data/app/assets/stylesheets/cm_admin/base/comments.scss +0 -3
  6. data/app/assets/stylesheets/cm_admin/base/common.scss +0 -2
  7. data/app/assets/stylesheets/cm_admin/base/filters.scss +2 -6
  8. data/app/assets/stylesheets/cm_admin/base/form.scss +0 -3
  9. data/app/assets/stylesheets/cm_admin/base/kanban.scss +0 -3
  10. data/app/assets/stylesheets/cm_admin/base/navbar.scss +0 -3
  11. data/app/assets/stylesheets/cm_admin/base/quicksearch.scss +0 -3
  12. data/app/assets/stylesheets/cm_admin/base/scaffold.scss +0 -2
  13. data/app/assets/stylesheets/cm_admin/base/show.scss +5 -4
  14. data/app/assets/stylesheets/cm_admin/base/sidebar.scss +0 -2
  15. data/app/assets/stylesheets/cm_admin/base/table.scss +5 -4
  16. data/app/assets/stylesheets/cm_admin/cm_admin.css.scss +22 -34
  17. data/app/assets/stylesheets/cm_admin/components/_accordion.scss +0 -1
  18. data/app/assets/stylesheets/cm_admin/components/_alerts.scss +0 -1
  19. data/app/assets/stylesheets/cm_admin/components/_buttons.scss +0 -1
  20. data/app/assets/stylesheets/cm_admin/components/_status-tag.scss +0 -1
  21. data/app/assets/stylesheets/cm_admin/pages/history_page.scss +0 -2
  22. data/app/assets/stylesheets/cm_admin/pages/import_page.scss +10 -4
  23. data/app/assets/stylesheets/cm_admin/scaffold.scss +1 -2
  24. data/app/views/cm_admin/main/_card.html.slim +1 -1
  25. data/app/views/cm_admin/main/_nested_fields.html.slim +4 -3
  26. data/app/views/cm_admin/main/_nested_table_form.html.slim +2 -1
  27. data/app/views/cm_admin/main/_nested_table_section.html.slim +2 -1
  28. data/app/views/cm_admin/main/_table.html.slim +1 -1
  29. data/app/views/cm_admin/main/_top_navbar.html.slim +1 -1
  30. data/lib/cm_admin/model.rb +14 -4
  31. data/lib/cm_admin/models/field.rb +1 -0
  32. data/lib/cm_admin/models/filter.rb +1 -1
  33. data/lib/cm_admin/models/form_field.rb +1 -1
  34. data/lib/cm_admin/version.rb +1 -1
  35. data/lib/cm_admin/view_helpers/field_display_helper.rb +2 -2
  36. data/lib/cm_admin/view_helpers/filter_helper.rb +46 -33
  37. data/lib/cm_admin/view_helpers/form_helper.rb +5 -2
  38. data/lib/cm_admin/view_helpers/navigation_helper.rb +21 -21
  39. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06a3ec1ffae63e78c0818d5b7a2e2a808a60e3cb20e73a4d9f8c8232917159eb
4
- data.tar.gz: f6e6a3e8e16ee3089e54df2677e62a9240522bbe1ff11a7965f078285af8a07c
3
+ metadata.gz: e040c173b4dc72d86d645df5fd314f10cee91457e38589ebe85cc6ce4d15936a
4
+ data.tar.gz: 0d423f9be6c3b5b99f44ff8618b11aaf67032404875a251eb346b10edf0c5389
5
5
  SHA512:
6
- metadata.gz: 06ef0c24ec2ad9cce4e38ecf6680f46e7d376b549f6757e6cca40a5ecaaac1b69e978266a1378ec6c64f9e98f0c19e502433f611ba9c53c627326b4e88c38b21
7
- data.tar.gz: fa39767c52545fe5431737eb066892b2dac63a78d9defdb1bfb469445dcc86c14c22cb7e718e477fd43195f36a613e71d4fca6fa1f69f28b3616c924f7b861d8
6
+ metadata.gz: f1c2c45019460ba876581ff9bfd28a56e94192212718610f37ccc6d7f13d88294f9fb72c85e41a074c68c3bc4b1eea645867a7d80228ed11bd68a1375a4dcc1c
7
+ data.tar.gz: 516878f3063839d82fc0393dd6b66abd3e250671508f0d738d4689249e42f3ccce227e21e197cccb59c0dbad4875739ff6c483676bc66fd1d2528700cf8ebed1
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cm-admin (1.5.33)
4
+ cm-admin (1.5.35)
5
5
  caxlsx_rails
6
6
  cocoon (~> 1.2.15)
7
7
  csv-importer (~> 0.8.2)
@@ -1,5 +1,3 @@
1
- @import "../helpers/index.scss";
2
-
3
1
  .auth {
4
2
  display: flex;
5
3
  justify-content: center;
@@ -1,6 +1,3 @@
1
- @import "../helpers/index.scss";
2
- @import "../dependency/bootstrap/scss/bootstrap";
3
-
4
1
  .card-list-container {
5
2
  overflow: hidden;
6
3
  padding-right: 24px;
@@ -1,6 +1,3 @@
1
- @import "../helpers/index.scss";
2
- @import "../dependency/bootstrap/scss/bootstrap";
3
-
4
1
  .comments-wrapper {
5
2
  padding: 24px;
6
3
  .comment-card {
@@ -1,5 +1,3 @@
1
- @import "../helpers/index.scss";
2
-
3
1
  @function size($size) {
4
2
  @return map-get($font-size, $size);
5
3
  }
@@ -1,5 +1,3 @@
1
- @import "../helpers/index.scss";
2
-
3
1
  .cm-filters-v2 {
4
2
  padding: 16px 24px;
5
3
  background-color: transparent;
@@ -78,8 +76,7 @@
78
76
  &:focus {
79
77
  border-color: $brand-color !important;
80
78
  outline: 0 !important;
81
- box-shadow:
82
- inset 0 1px 1px rgba(0, 0, 0, 0.075),
79
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),
83
80
  0 0 8px rgba(102, 175, 233, 0.6) !important;
84
81
  }
85
82
  }
@@ -97,8 +94,7 @@
97
94
  &:focus {
98
95
  border-color: $brand-color;
99
96
  outline: 0;
100
- box-shadow:
101
- inset 0 1px 1px rgba(0, 0, 0, 0.075),
97
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),
102
98
  0 0 8px rgba(102, 175, 233, 0.6);
103
99
  }
104
100
  .select2-selection__rendered {
@@ -1,6 +1,3 @@
1
- @import "../helpers/index.scss";
2
- @import "../dependency/bootstrap/scss/bootstrap";
3
-
4
1
  @function size($size) {
5
2
  @return map-get($font-size, $size);
6
3
  }
@@ -1,6 +1,3 @@
1
- @import "../helpers/index.scss";
2
- @import "../dependency/bootstrap/scss/bootstrap";
3
-
4
1
  .kanban-container {
5
2
  @extend .d-flex, .flex-nowrap;
6
3
  gap: 8px;
@@ -1,6 +1,3 @@
1
- @import "../helpers/index.scss";
2
- @import "../dependency/bootstrap/scss/bootstrap";
3
-
4
1
  .entity-header {
5
2
  @extend .d-flex.justify-content-between.align-items-start.p-4;
6
3
  background-color: var(--bs-white);
@@ -1,6 +1,3 @@
1
- @import "../helpers/index.scss";
2
- @import "../dependency/bootstrap/scss/bootstrap";
3
-
4
1
  .quick-search-modal {
5
2
  .modal-dialog {
6
3
  max-width: 526px;
@@ -1,5 +1,3 @@
1
- @import "../helpers/index.scss";
2
-
3
1
  html {
4
2
  overflow: hidden;
5
3
  }
@@ -1,6 +1,3 @@
1
- @import "../helpers/index.scss";
2
- @import "../dependency/bootstrap/scss/bootstrap";
3
-
4
1
  .show-page {
5
2
  height: 100vh;
6
3
  overflow: auto;
@@ -40,7 +37,11 @@
40
37
  margin-bottom: 0;
41
38
  }
42
39
  &__title {
43
- @include font($size: $t4-text, $color: $primary-text-clr, $weight: 600);
40
+ @include font(
41
+ $size: $t4-text,
42
+ $color: $primary-text-clr,
43
+ $weight: 600
44
+ );
44
45
  }
45
46
  &__label {
46
47
  @include font($size: $t4-text, $color: $ink-lighter-clr);
@@ -1,5 +1,3 @@
1
- @import "../helpers/index.scss";
2
-
3
1
  .cm-sidebar {
4
2
  position: fixed;
5
3
  top: 0;
@@ -1,6 +1,3 @@
1
- @import "../helpers/index.scss";
2
- @import "../dependency/bootstrap/scss/bootstrap";
3
-
4
1
  .cm-index-page {
5
2
  background-color: $white;
6
3
  overflow: auto;
@@ -115,7 +112,11 @@
115
112
  .popup-card {
116
113
  .popup-option {
117
114
  a {
118
- @include font($size: $t4-text, $color: $ink-regular-clr, $weight: 500);
115
+ @include font(
116
+ $size: $t4-text,
117
+ $color: $ink-regular-clr,
118
+ $weight: 500
119
+ );
119
120
  line-height: 22px;
120
121
  }
121
122
  }
@@ -1,34 +1,22 @@
1
- /*
2
- * This is a manifest file that'll be compiled into application.css, which will include all the files
3
- * listed below.
4
- *
5
- * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's
6
- * vendor/assets/stylesheets directory can be referenced here using a relative path.
7
- *
8
- * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
- * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
- * files in this directory. Styles in this file should be added after the last require_* statement.
11
- * It is generally better to create a new file per style scope.
12
- *
13
- *= require 'cm_admin/pages/import_page'
14
- *= require 'cm_admin/pages/history_page'
15
- *= require 'cm_admin/base/table'
16
- *= require 'cm_admin/base/navbar'
17
- *= require 'cm_admin/base/sidebar'
18
- *= require 'cm_admin/base/show'
19
- *= require 'cm_admin/base/form'
20
- *= require 'cm_admin/base/quicksearch'
21
- *= require 'cm_admin/base/scaffold'
22
- *= require 'cm_admin/base/auth'
23
- *= require 'cm_admin/base/filters'
24
- *= require 'cm_admin/base/comments'
25
- *= require 'cm_admin/base/common'
26
- *= require 'cm_admin/base/cardView'
27
- *= require 'cm_admin/base/kanban'
28
- *= require 'cm_admin/components/index'
29
- *= require 'cm_admin/dependency/flatpickr.min'
30
- *= require 'cm_admin/dependency/fontawesome.all'
31
- *= require 'cm_admin/dependency/jquery-jgrowl.min'
32
- *= require 'cm_admin/scaffold'
33
- *= require_self
34
- */
1
+ @import "./dependency/bootstrap/scss/bootstrap";
2
+ @import "./helpers/index.scss";
3
+ @import "./pages/import_page";
4
+ @import "./pages/history_page";
5
+ @import "./base/table";
6
+ @import "./base/navbar";
7
+ @import "./base/sidebar";
8
+ @import "./base/show";
9
+ @import "./base/form";
10
+ @import "./base/quicksearch";
11
+ @import "./base/scaffold";
12
+ @import "./base/auth";
13
+ @import "./base/filters";
14
+ @import "./base/comments";
15
+ @import "./base/common";
16
+ @import "./base/cardView";
17
+ @import "./base/kanban";
18
+ @import "./components/index";
19
+ @import "./dependency/flatpickr.min";
20
+ @import "./dependency/fontawesome.all";
21
+ @import "./dependency/jquery-jgrowl.min";
22
+ @import "./scaffold";
@@ -1,5 +1,4 @@
1
1
  @import "../helpers/index";
2
- @import "../dependency/bootstrap/scss/bootstrap";
3
2
 
4
3
  .cm-admin .accordion {
5
4
  @extend .accordion;
@@ -1,5 +1,4 @@
1
1
  @import "../helpers/index";
2
- @import "../dependency/bootstrap/scss/bootstrap";
3
2
 
4
3
  // New alert styles
5
4
  .cm-admin .alert {
@@ -1,5 +1,4 @@
1
1
  @import "../helpers/index.scss";
2
- @import "../dependency/bootstrap/scss/bootstrap";
3
2
 
4
3
  .btn-icon-spacing {
5
4
  @extend .d-inline-flex, .align-items-center, .justify-content-center;
@@ -1,5 +1,4 @@
1
1
  @import "../helpers/index.scss";
2
- @import "../dependency/bootstrap/scss/bootstrap";
3
2
 
4
3
  .status-tag {
5
4
  @extend .badge;
@@ -1,5 +1,3 @@
1
- @import "../helpers/index.scss";
2
-
3
1
  .history-items-list {
4
2
  position: relative;
5
3
  list-style: none;
@@ -1,5 +1,3 @@
1
- @import "../helpers/index.scss";
2
-
3
1
  @function size($size) {
4
2
  @return map-get($font-size, $size);
5
3
  }
@@ -42,7 +40,11 @@
42
40
  background: $green-lightest-clr;
43
41
  border-radius: $radius-4;
44
42
  .success-title {
45
- @include font($size: size(12), $color: $green-regular-clr, $weight: bold);
43
+ @include font(
44
+ $size: size(12),
45
+ $color: $green-regular-clr,
46
+ $weight: bold
47
+ );
46
48
  font-family: $primary-font;
47
49
  margin-bottom: 16px;
48
50
  text-transform: uppercase;
@@ -82,7 +84,11 @@
82
84
  background: $blue-lightest-clr;
83
85
  border-radius: $radius-4;
84
86
  .note-title {
85
- @include font($size: size(12), $color: $blue-regular-clr, $weight: bold);
87
+ @include font(
88
+ $size: size(12),
89
+ $color: $blue-regular-clr,
90
+ $weight: bold
91
+ );
86
92
  font-family: $primary-font;
87
93
  margin-bottom: 16px;
88
94
  text-transform: uppercase;
@@ -3,7 +3,7 @@
3
3
  .jGrowl {
4
4
  color: $ink-regular-clr !important;
5
5
  font-size: $t4-text !important;
6
- .success{
6
+ .success {
7
7
  background-color: $green-light-clr !important;
8
8
  }
9
9
  .notice {
@@ -12,7 +12,6 @@
12
12
  .error {
13
13
  background-color: $red-light-clr !important;
14
14
  }
15
-
16
15
  }
17
16
 
18
17
  .nested-field-wrapper {
@@ -1,7 +1,7 @@
1
1
  // Card view right now is application specific, so card partial will be overwritten in the application
2
2
 
3
3
  .table-top
4
- p.table-top__total-count = "#{humanized_ar_collection_count(@ar_object.pagy.count, @model.ar_model.table_name)}"
4
+ p.table-top__total-count = "#{humanized_ar_collection_count(@ar_object.pagy.count, @model.table_name)}"
5
5
  .table-top__column-action
6
6
  .btn-group[role="group" aria-label="Basic example"]
7
7
  a.btn.btn-ghost href="#{cm_admin.send("#{@model.name.underscore}_index_path")}?page=#{params[:page] || 1}"
@@ -19,10 +19,11 @@
19
19
  div
20
20
  - nested_table_field.fields.each do |field|
21
21
  .form-field
22
- .field-label-wrapper
23
- label.field-label = field.field_name.to_s.titleize
22
+ - if field.label
23
+ .field-label-wrapper
24
+ label.field-label = field.field_name.to_s.titleize
24
25
  .field-input-wrapper
25
26
  = input_field_for_column(f, field)
26
27
  - if nested_table_field.associated_fields.present?
27
28
  - nested_table_field.associated_fields.each do |associated_nested_field|
28
- = render partial: '/cm_admin/main/nested_table_form', locals: { f: f, nested_table_field: associated_nested_field }
29
+ = render partial: '/cm_admin/main/nested_table_form', locals: { f: f, nested_table_field: associated_nested_field }
@@ -12,7 +12,8 @@
12
12
  |
13
13
  - nested_table_field.fields.each do |field|
14
14
  th data-field-type="#{field.input_type}"
15
- = field.label.to_s.titleize || field.field_name.to_s.titleize
15
+ - if field.label
16
+ = field.label.to_s.titleize || field.field_name.to_s.titleize
16
17
  tbody class="insert-cocoon-position-#{uniq_no}"
17
18
  = f.fields_for table_name do |record|
18
19
  - if record.object.persisted? || @ar_object.errors.present?
@@ -9,7 +9,8 @@
9
9
  tr
10
10
  - nested_field.fields.each do |field|
11
11
  th scope="col" data-field-type="#{field.field_type}"
12
- = field.label || field.field_name.to_s.titleize
12
+ - if field.label
13
+ = field.label || field.field_name.to_s.titleize
13
14
  tbody
14
15
  - associated_records.each do |record|
15
16
  tr
@@ -1,5 +1,5 @@
1
1
  .table-top
2
- p.table-top__total-count = "#{humanized_ar_collection_count(@ar_object.pagy.count, @model.ar_model.table_name)}"
2
+ p.table-top__total-count = "#{humanized_ar_collection_count(@ar_object.pagy.count, @model.table_name)}"
3
3
  .table-top__column-action
4
4
  - if @current_action.view_type == :card_view
5
5
  .btn-group[role="group" aria-label="Card Toggle"]
@@ -2,7 +2,7 @@
2
2
  .entity-header__info
3
3
  - if cm_admin.method_defined?(:"#{@model.name.underscore}_index_path") && (@model.current_action.name == 'show'|| @model.current_action.name == 'history' || @model.current_action.layout_type.present?)
4
4
  .breadcrumb
5
- = link_to "#{@model.name.titleize.pluralize} /", cm_admin.send(:"#{@model.name.underscore}_index_path"), class: 'text-reset'
5
+ = link_to "#{@model.model_name.titleize.pluralize} /", cm_admin.send(:"#{@model.name.underscore}_index_path"), class: 'text-reset'
6
6
  h4 = action_title
7
7
  / - if @model.current_action.page_description
8
8
  / p.mb-0.text-body-secondary = @model.current_action.page_description
@@ -29,7 +29,7 @@ module CmAdmin
29
29
  include CmAdmin::Engine.routes.url_helpers
30
30
 
31
31
  attr_accessor :available_actions, :actions_set, :available_fields, :additional_permitted_fields,
32
- :current_action, :params, :filters, :available_tabs, :icon_name, :bulk_actions
32
+ :current_action, :params, :filters, :available_tabs, :icon_name, :bulk_actions, :display_name
33
33
  attr_reader :name, :ar_model, :is_visible_on_sidebar, :importer
34
34
 
35
35
  def initialize(entity, &block)
@@ -100,10 +100,22 @@ module CmAdmin
100
100
  @icon_name = name
101
101
  end
102
102
 
103
+ def set_display_name(name)
104
+ @display_name = name
105
+ end
106
+
103
107
  def permit_additional_fields(fields=[])
104
108
  @additional_permitted_fields = fields
105
109
  end
106
110
 
111
+ def table_name
112
+ @display_name.present? ? @display_name : @ar_model.table_name
113
+ end
114
+
115
+ def model_name
116
+ @display_name.present? ? @display_name : @name
117
+ end
118
+
107
119
  # Shared between export controller and resource controller
108
120
  def filter_params(params)
109
121
  # OPTIMIZE: Need to check if we can permit the filter_params in a better way
@@ -126,7 +138,6 @@ module CmAdmin
126
138
 
127
139
  $available_actions.each do |action|
128
140
  define_method action.name.to_sym do
129
-
130
141
  # controller_name & action_name from ActionController
131
142
  @model = CmAdmin::Model.find_by(name: controller_name.classify)
132
143
  @model.params = params
@@ -140,6 +151,7 @@ module CmAdmin
140
151
  def pundit_user
141
152
  Current.user
142
153
  end
154
+
143
155
  private
144
156
 
145
157
  def user_not_authorized
@@ -149,7 +161,5 @@ module CmAdmin
149
161
  end if $available_actions.present?
150
162
  CmAdmin.const_set "#{@name}Controller", klass
151
163
  end
152
-
153
-
154
164
  end
155
165
  end
@@ -27,6 +27,7 @@ module CmAdmin
27
27
  self.tag_class = {}
28
28
  self.col_size = nil
29
29
  self.field_type = :string
30
+ self.label = field_name.to_s.titleize
30
31
  end
31
32
  end
32
33
  end
@@ -5,7 +5,7 @@ module CmAdmin
5
5
  class Filter
6
6
  include Utils::Helpers
7
7
 
8
- attr_accessor :db_column_name, :filter_type, :placeholder, :collection, :filter_with
8
+ attr_accessor :db_column_name, :filter_type, :placeholder, :collection, :filter_with, :helper_method
9
9
 
10
10
  VALID_FILTER_TYPES = Set[:date, :multi_select, :range, :search, :single_select].freeze
11
11
 
@@ -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_attrs, :target, :col_size, :ajax_url
9
+ :placeholder, :display_if, :html_attrs, :target, :col_size, :ajax_url, :helper_text
10
10
 
11
11
  VALID_INPUT_TYPES = %i[
12
12
  integer decimal string single_select multi_select date date_time text
@@ -1,3 +1,3 @@
1
1
  module CmAdmin
2
- VERSION = '1.5.33'
2
+ VERSION = '1.5.35'
3
3
  end
@@ -4,7 +4,7 @@ module CmAdmin
4
4
  def show_field(ar_object, field)
5
5
  return unless field.display_if.call(ar_object)
6
6
  content_tag(:div, class: "card-info") do
7
- concat show_field_label(ar_object, field)
7
+ concat show_field_label(ar_object, field) if field.label
8
8
  concat value_with_prefix_and_suffix(ar_object, field)
9
9
  end
10
10
  end
@@ -17,7 +17,7 @@ module CmAdmin
17
17
 
18
18
  content_tag(:div, class: "col-#{col_size}") do
19
19
  content_tag(:div, class: "card-info") do
20
- concat show_field_label(ar_object, field)
20
+ concat show_field_label(ar_object, field) if field.label
21
21
  concat value_with_prefix_and_suffix(ar_object, field)
22
22
  end
23
23
  end
@@ -1,10 +1,9 @@
1
1
  module CmAdmin
2
2
  module ViewHelpers
3
3
  module FilterHelper
4
-
5
4
  def generate_filters(filters)
6
- search_filter = filters.select{ |x| x.filter_type.eql?(:search) }.last
7
- other_filters = filters.reject{ |x| x.filter_type.eql?(:search) }
5
+ search_filter = filters.select { |x| x.filter_type.eql?(:search) }.last
6
+ other_filters = filters.reject { |x| x.filter_type.eql?(:search) }
8
7
  concat(content_tag(:div, class: 'cm-filters-v2') do
9
8
  concat(content_tag(:div, class: 'cm-filters-v2__inner') do
10
9
  concat add_search_filter(search_filter) if search_filter
@@ -15,11 +14,11 @@ module CmAdmin
15
14
  concat clear_filters
16
15
  end)
17
16
  end)
18
- return
17
+ nil
19
18
  end
20
19
 
21
20
  def add_filters_dropdown(filters)
22
- concat(content_tag(:button, class: 'dropdown btn-ghost', data: {bs_toggle: 'dropdown'}) do
21
+ concat(content_tag(:button, class: 'dropdown btn-ghost', data: { bs_toggle: 'dropdown' }) do
23
22
  concat tag.i(class: 'fas fa-filter')
24
23
  concat tag.span 'Filter'
25
24
  end)
@@ -28,11 +27,11 @@ module CmAdmin
28
27
  concat(content_tag(:div, class: 'popup-base') do
29
28
  concat(content_tag(:div, class: 'popup-inner') do
30
29
  concat(content_tag(:div, class: 'search-area') do
31
- concat tag.input placeholder: 'Search for filter', data: {behaviour: 'dropdown-filter-search'}
30
+ concat tag.input placeholder: 'Search for filter', data: { behaviour: 'dropdown-filter-search' }
32
31
  end)
33
32
  concat(content_tag(:div, class: 'list-area') do
34
33
  filters.each do |filter|
35
- concat(content_tag(:div, class: 'pointer list-item', data: {behaviour: 'filter-option', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}"}) do
34
+ concat(content_tag(:div, class: 'pointer list-item', data: { behaviour: 'filter-option', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}" }) do
36
35
  tag.span filter.placeholder.to_s.titleize
37
36
  end)
38
37
  end
@@ -40,14 +39,14 @@ module CmAdmin
40
39
  end)
41
40
  end)
42
41
  end)
43
- return
42
+ nil
44
43
  end
45
44
 
46
45
  def clear_filters
47
46
  concat(content_tag(:div, class: "clear-btn #{params.dig(:filters) ? '' : 'hidden'}") do
48
47
  tag.span 'Clear all'
49
48
  end)
50
- return
49
+ nil
51
50
  end
52
51
 
53
52
  def filter_ui(filters)
@@ -63,11 +62,11 @@ module CmAdmin
63
62
  concat add_multi_select_filter(filter)
64
63
  end
65
64
  end
66
- return
65
+ nil
67
66
  end
68
67
 
69
68
  def filter_chip(value, filter)
70
- data_hash = {behaviour: 'filter-input', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}"}
69
+ data_hash = { behaviour: 'filter-input', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}" }
71
70
  data_hash.merge!(bs_toggle: 'dropdown') if filter.filter_type.to_s.eql?('single_select')
72
71
 
73
72
  if value && filter.filter_type.to_s.eql?('multi_select')
@@ -82,7 +81,7 @@ module CmAdmin
82
81
  tag.i class: 'fa fa-times bolder'
83
82
  end)
84
83
  end)
85
- return
84
+ nil
86
85
  end
87
86
 
88
87
  def add_search_filter(filter)
@@ -91,7 +90,7 @@ module CmAdmin
91
90
  concat(content_tag(:span, class: 'input-group-text') do
92
91
  tag.i class: 'fa fa-search'
93
92
  end)
94
- concat tag.input type: 'string', class: 'form-control', value: "#{params.dig(:filters, :search)}", placeholder: "#{filter.placeholder}", data: {behaviour: 'input-search'}
93
+ concat tag.input type: 'string', class: 'form-control', value: "#{params.dig(:filters, :search)}", placeholder: "#{filter.placeholder}", data: { behaviour: 'input-search' }
95
94
  end)
96
95
  end
97
96
  end
@@ -102,11 +101,11 @@ module CmAdmin
102
101
  concat filter_chip(value, filter)
103
102
 
104
103
  concat(content_tag(:div, class: 'position-absolute mt-2 range-container hidden') do
105
- concat tag.input type: 'number', min: '0', step: '1', class: 'range-item', value: "#{value ? value.split(' to ')[0] : ''}", placeholder: 'From', data: {behaviour: 'filter', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}"}
106
- concat tag.input type: 'number', min: '0', step: '1', class: 'range-item', value: "#{value ? value.split(' to ')[1] : ''}", placeholder: 'To', data: {behaviour: 'filter', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}"}
104
+ concat tag.input type: 'number', min: '0', step: '1', class: 'range-item', value: "#{value ? value.split(' to ')[0] : ''}", placeholder: 'From', data: { behaviour: 'filter', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}" }
105
+ concat tag.input type: 'number', min: '0', step: '1', class: 'range-item', value: "#{value ? value.split(' to ')[1] : ''}", placeholder: 'To', data: { behaviour: 'filter', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}" }
107
106
  end)
108
107
  end)
109
- return
108
+ nil
110
109
  end
111
110
 
112
111
  def add_date_filter(filter)
@@ -115,37 +114,44 @@ module CmAdmin
115
114
  concat filter_chip(value, filter)
116
115
 
117
116
  concat(content_tag(:div, class: 'date-filter-wrapper w-100') do
118
- concat tag.input class: 'w-100 pb-1', value: "#{value ? value : ''}", data: {behaviour: 'filter', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}"}
117
+ concat tag.input class: 'w-100 pb-1', value: "#{value || ''}", data: { behaviour: 'filter', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}" }
119
118
  end)
120
119
  end)
121
- return
120
+ nil
122
121
  end
123
122
 
124
123
  def add_single_select_filter(filter)
125
124
  value = params.dig(:filters, :"#{filter.filter_type}", :"#{filter.db_column_name}")
125
+ select_options = if filter.helper_method
126
+ send(filter.helper_method)
127
+ elsif filter.collection
128
+ filter.collection
129
+ else
130
+ []
131
+ end
126
132
  concat(content_tag(:div, class: "position-relative me-3 #{value ? '' : 'hidden'}") do
127
- if value && filter.collection[0].class == Array
128
- selected_value_text = filter.collection.map{|collection| collection[0] if collection[1].to_s.eql?(value) }.compact.join(', ')
129
- else
130
- selected_value_text = value
131
- end
133
+ selected_value_text = if value && select_options[0].class == Array
134
+ select_options.map { |collection| collection[0] if collection[1].to_s.eql?(value) }.compact.join(', ')
135
+ else
136
+ value
137
+ end
132
138
  concat filter_chip(selected_value_text, filter)
133
139
 
134
140
  concat(content_tag(:div, class: 'dropdown-menu dropdown-popup') do
135
141
  concat(content_tag(:div, class: 'popup-base') do
136
142
  concat(content_tag(:div, class: 'popup-inner') do
137
143
  concat(content_tag(:div, class: 'search-area') do
138
- concat tag.input placeholder: "#{filter.placeholder}", data: {behaviour: 'dropdown-filter-search'}
144
+ concat tag.input placeholder: "#{filter.placeholder}", data: { behaviour: 'dropdown-filter-search' }
139
145
  end)
140
146
  concat(content_tag(:div, class: 'list-area') do
141
- filter.collection.each do |val|
147
+ select_options.each do |val|
142
148
  if val.class.eql?(Array)
143
149
  filter_value = val[1]
144
150
  filter_text = val[0]
145
151
  elsif val.class.eql?(String)
146
152
  filter_value = filter_text = val
147
153
  end
148
- concat(content_tag(:div, class: "pointer list-item #{(value.present? && value.eql?(filter_value.to_s)) ? 'selected' : ''}", data: {behaviour: 'select-option', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}", value: filter_value}) do
154
+ concat(content_tag(:div, class: "pointer list-item #{value.present? && value.eql?(filter_value.to_s) ? 'selected' : ''}", data: { behaviour: 'select-option', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}", value: filter_value }) do
149
155
  concat tag.span filter_text.to_s
150
156
  end)
151
157
  end
@@ -154,14 +160,21 @@ module CmAdmin
154
160
  end)
155
161
  end)
156
162
  end)
157
- return
163
+ nil
158
164
  end
159
165
 
160
166
  def add_multi_select_filter(filter)
161
167
  value = params.dig(:filters, :"#{filter.filter_type}", :"#{filter.db_column_name}")
162
- if value && filter.collection[0].class == Array
168
+ select_options = if filter.helper_method
169
+ send(filter.helper_method)
170
+ elsif filter.collection
171
+ filter.collection
172
+ else
173
+ []
174
+ end
175
+ if value && select_options[0].class == Array
163
176
  value_mapped_text = []
164
- filter.collection.each do |array|
177
+ select_options.each do |array|
165
178
  value_mapped_text << array[0].titleize if value.include?(array[1].to_s)
166
179
  end
167
180
  else
@@ -185,17 +198,17 @@ module CmAdmin
185
198
  end)
186
199
  end
187
200
  end
188
- concat tag.input placeholder: "#{filter.placeholder}", data: {behaviour: 'dropdown-filter-search'}
201
+ concat tag.input placeholder: "#{filter.placeholder}", data: { behaviour: 'dropdown-filter-search' }
189
202
  end)
190
203
  concat(content_tag(:div, class: 'list-area') do
191
- filter.collection.each do |val|
204
+ select_options.each do |val|
192
205
  if val.class.eql?(Array)
193
206
  filter_value = val[1]
194
207
  filter_text = val[0]
195
208
  elsif val.class.eql?(String)
196
209
  filter_value = filter_text = val
197
210
  end
198
- concat(content_tag(:div, class: "pointer list-item #{(value && (value.eql?(val) || value.include?(filter_value.to_s))) ? 'selected' : ''}", data: {behaviour: 'select-option', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}", value: filter_value}) do
211
+ concat(content_tag(:div, class: "pointer list-item #{value && (value.eql?(val) || value.include?(filter_value.to_s)) ? 'selected' : ''}", data: { behaviour: 'select-option', filter_type: "#{filter.filter_type}", db_column: "#{filter.db_column_name}", value: filter_value }) do
199
212
  concat tag.input class: 'cm-checkbox', type: 'checkbox', checked: value ? value.include?(filter_value.to_s) : false
200
213
  concat tag.label filter_text.to_s.titleize, class: 'pointer'
201
214
  end)
@@ -206,7 +219,7 @@ module CmAdmin
206
219
  end)
207
220
  end)
208
221
  end)
209
- return
222
+ nil
210
223
  end
211
224
  end
212
225
  end
@@ -108,9 +108,12 @@ module CmAdmin
108
108
  concat input_field_for_column(form_obj, field)
109
109
  else
110
110
  concat(content_tag(:div, class: "form-field #{field.disabled ? 'disabled' : ''}") do
111
- concat form_obj.label field.label, field.label, class: 'field-label'
112
- concat tag.br
111
+ if field.label
112
+ concat form_obj.label field.label, field.label, class: 'field-label'
113
+ concat tag.br
114
+ end
113
115
  concat input_field_for_column(form_obj, field)
116
+ concat tag.small field.helper_text, class: 'form-text text-muted' if field.helper_text.present?
114
117
  concat tag.p resource.errors[field.field_name].first if resource.errors[field.field_name].present?
115
118
  end)
116
119
  end
@@ -4,34 +4,34 @@ module CmAdmin
4
4
  module NavigationHelper
5
5
  include Pagy::Frontend
6
6
  def navigation_links(navigation_type)
7
- CmAdmin.config.cm_admin_models.map { |model|
8
- if model.is_visible_on_sidebar
9
- path = CmAdmin::Engine.mount_path + '/' + model.name.underscore.pluralize
10
- if policy([:cm_admin, model.name.classify.constantize]).index?
11
- if navigation_type == "sidebar"
12
- content_tag(:a, href: path) do
13
- content_tag(:div, class: 'menu-item') do
14
- content_tag(:span, class: 'menu-icon') do
15
- concat tag.i class: "#{model.icon_name}"
16
- end +
17
- model.name.titleize.pluralize
18
- end
7
+ CmAdmin.config.cm_admin_models.map do |model|
8
+ next unless model.is_visible_on_sidebar
9
+
10
+ path = CmAdmin::Engine.mount_path + '/' + model.name.underscore.pluralize
11
+ if policy([:cm_admin, model.name.classify.constantize]).index?
12
+ if navigation_type == 'sidebar'
13
+ content_tag(:a, href: path) do
14
+ content_tag(:div, class: 'menu-item') do
15
+ content_tag(:span, class: 'menu-icon') do
16
+ concat tag.i class: "#{model.icon_name}"
17
+ end +
18
+ model.model_name.titleize.pluralize
19
19
  end
20
- elsif navigation_type == "quick_links"
21
- content_tag(:a, href: path, class: 'visible') do
22
- content_tag(:div, class: 'result-item') do
23
- content_tag(:span) do
24
- concat tag.i class: "#{model.icon_name}"
25
- end +
20
+ end
21
+ elsif navigation_type == 'quick_links'
22
+ content_tag(:a, href: path, class: 'visible') do
23
+ content_tag(:div, class: 'result-item') do
24
+ content_tag(:span) do
25
+ concat tag.i class: "#{model.icon_name}"
26
+ end +
26
27
  content_tag(:span) do
27
- model.name
28
+ model.model_name
28
29
  end
29
- end
30
30
  end
31
31
  end
32
32
  end
33
33
  end
34
- }.join.html_safe
34
+ end.join.html_safe
35
35
  end
36
36
  end
37
37
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cm-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.33
4
+ version: 1.5.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: exe
15
15
  cert_chain: []
16
- date: 2024-07-09 00:00:00.000000000 Z
16
+ date: 2024-07-12 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: caxlsx_rails