cm-admin 1.3.3 → 1.3.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1f06e165a6b468dde8b09746a40a195df154f4639626a12b4c2f856d4184abdf
4
- data.tar.gz: 41e071501c0d1aed8bf7f1bd2ac301cc41bb6e06502abde2c39f5d3fd21e6dd5
3
+ metadata.gz: 4d3ee61a20da53d4f971707c68d72d47665c39a59eebdd554d13b96254cf666c
4
+ data.tar.gz: 9c2e4b2fb2ca38f03a8f799c69d3f966088211b10909d1a19ca437e5437dc93c
5
5
  SHA512:
6
- metadata.gz: fe73add42f92fc5f392cb17d16c37f5a9b6185d439ded6a51ffaff0ee5409d80074d2e5c76e0fbfdf9479a088fcfb9999079573e9ca8ff1c2a57d1216d0c5d38
7
- data.tar.gz: a321b63a0f573d01f203045b6f89f1fc45407722c919cc164f4646ff284fdd33a3dcfc0b2e3f27c8cb00cb1e81e62c6cdfc1dfb61563e4db2234ca4632a22efe
6
+ metadata.gz: 6b0b6889ee66cb8b6cc230d015356478dba9ccd348003334ddb315bdc34d2071033a91c65c196c92207fb01f8551377043effd3117dac910118bfcd71b20523b
7
+ data.tar.gz: 64600259cd7a8e671a5393f7a0058182303f99c8cc80c2fe0fa41441c8a1a7ce7c2124658bec77b3cf26cdfc602a9945a0f9b77279c15bfb3f28a923608c8637
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cm-admin (1.3.3)
4
+ cm-admin (1.3.5)
5
5
  caxlsx_rails
6
6
  cocoon (~> 1.2.15)
7
7
  csv-importer (~> 0.8.2)
@@ -1,20 +1,19 @@
1
1
  $(document).on('click', '.form_submit', function(e) {
2
- console.log('Came here')
3
2
  e.preventDefault();
4
3
  var submit = [];
5
4
  var form_class = $(this).data('form-class');
6
5
  $("." + form_class + " input.required, ." + form_class + " textarea.required").each(function() {
7
- $(this).removeClass('error');
6
+ $(this).removeClass('is-invalid');
8
7
  if ($(this).val().trim().length === 0) {
9
- $(this).addClass('error');
8
+ $(this).addClass('is-invalid');
10
9
  $(this)[0].scrollIntoView(true);
11
10
  submit.push(true);
12
11
  }
13
12
  });
14
13
  $("." + form_class + " select.required").each(function() {
15
- $(this).removeClass('error');
14
+ $(this).removeClass('is-invalid');
16
15
  if ($(this).val().trim().length === 0) {
17
- $(this).parent().find('.select2').addClass('error');
16
+ $(this).parent().find('.select2').addClass('is-invalid');
18
17
  $(this)[0].scrollIntoView(true);
19
18
  submit.push(true);
20
19
  }
@@ -15,7 +15,7 @@
15
15
  tr
16
16
  - nested_field.fields.each do |field|
17
17
  td data-field-type="#{field.field_type}"
18
- = record.send(field.field_name)
18
+ = show_field_value(record, field)
19
19
  - else
20
20
  - associated_records.each do |record|
21
21
  .card.mb-3 data-table-name="#{nested_field.field_name}"
@@ -10,7 +10,7 @@
10
10
  | Attention
11
11
  .alert-body
12
12
  p.body-title
13
- | Error: unable to save #{@ar_object.class.downcase}
13
+ | Error: unable to save #{@ar_object.class.name.downcase}
14
14
  p.body-info
15
15
  ul
16
16
  - @ar_object.errors.full_messages.each do |error_message|
@@ -142,7 +142,7 @@ module CmAdmin
142
142
  @available_actions << bulk_action
143
143
  end
144
144
 
145
- def filter(db_column_name, filter_type, options={})
145
+ def filter(db_column_name, filter_type, options = {})
146
146
  @filters << CmAdmin::Models::Filter.new(db_column_name: db_column_name, filter_type: filter_type, options: options)
147
147
  end
148
148
 
@@ -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
8
+ attr_accessor :db_column_name, :filter_type, :placeholder, :collection, :scope_name
9
9
 
10
10
  VALID_FILTER_TYPES = Set[:date, :multi_select, :range, :search, :single_select].freeze
11
11
 
@@ -14,6 +14,7 @@ module CmAdmin
14
14
  raise ArgumentError, "Kindly select a valid filter type like #{VALID_FILTER_TYPES.sort.to_sentence(last_word_connector: ', or ')} instead of #{filter_type} for column #{db_column_name}" unless VALID_FILTER_TYPES.include?(filter_type.to_sym)
15
15
 
16
16
  @db_column_name, @filter_type = structure_data(db_column_name, filter_type)
17
+ @scope_name = nil
17
18
  set_default_values
18
19
  options.each do |key, value|
19
20
  send("#{key}=", value)
@@ -52,7 +53,7 @@ module CmAdmin
52
53
  def filtered_data(filter_params, records, filters)
53
54
  if filter_params
54
55
  filter_params.each do |scope_type, scope_value|
55
- scope_name = case scope_type
56
+ filter_method = case scope_type
56
57
  when 'date', 'range'
57
58
  'date_and_range'
58
59
  when 'single_select', 'multi_select'
@@ -60,7 +61,7 @@ module CmAdmin
60
61
  else
61
62
  scope_type
62
63
  end
63
- records = send("cm_#{scope_name}_filter", scope_value, records, filters) if scope_value.present?
64
+ records = send("cm_#{filter_method}_filter", scope_value, records, filters) if scope_value.present?
64
65
  end
65
66
  end
66
67
  records
@@ -71,40 +72,44 @@ module CmAdmin
71
72
 
72
73
  table_name = records.table_name
73
74
  filters.select { |x| x if x.filter_type.eql?(:search) }.each do |filter|
74
- query_variables = []
75
- filter.db_column_name.each do |col|
76
- case col
77
- when Symbol
78
- query_variables << "#{table_name.pluralize}.#{col}"
79
- when Hash
80
- col.map do |key, value|
81
- value.map { |val| query_variables << "#{key.to_s.pluralize}.#{val}" }
75
+ if filter.scope_name.present?
76
+ return records.send(filter.scope_name, scope_value)
77
+ else
78
+ query_variables = []
79
+ filter.db_column_name.each do |col|
80
+ case col
81
+ when Symbol
82
+ query_variables << "#{table_name.pluralize}.#{col}"
83
+ when Hash
84
+ col.map do |key, value|
85
+ value.map { |val| query_variables << "#{key.to_s.pluralize}.#{val}" }
86
+ end
82
87
  end
83
88
  end
84
- end
85
- terms = scope_value.downcase.split(/\s+/)
86
- terms = terms.map { |e|
87
- (e.gsub('*', '%').prepend('%') + '%').gsub(/%+/, '%')
88
- }
89
- sql = ''
90
- query_variables.each.with_index do |column, i|
91
- sql.concat("#{column} ILIKE ?")
92
- sql.concat(' OR ') unless query_variables.size.eql?(i + 1)
93
- end
89
+ terms = scope_value.downcase.split(/\s+/)
90
+ terms = terms.map { |e|
91
+ (e.gsub('*', '%').prepend('%') + '%').gsub(/%+/, '%')
92
+ }
93
+ sql = ''
94
+ query_variables.each.with_index do |column, i|
95
+ sql.concat("#{column} ILIKE ?")
96
+ sql.concat(' OR ') unless query_variables.size.eql?(i + 1)
97
+ end
94
98
 
95
- if filter.db_column_name.map { |x| x.is_a?(Hash) }.include?(true)
96
- associations_hash = filter.db_column_name.select { |x| x if x.is_a?(Hash) }.last
97
- records = records.left_joins(associations_hash.keys).distinct
98
- end
99
+ if filter.db_column_name.map { |x| x.is_a?(Hash) }.include?(true)
100
+ associations_hash = filter.db_column_name.select { |x| x if x.is_a?(Hash) }.last
101
+ records = records.left_joins(associations_hash.keys).distinct
102
+ end
99
103
 
100
- records = records.where(
101
- terms.map { |term|
102
- sql
103
- }.join(' AND '),
104
- *terms.map { |e| [e] * query_variables.size }.flatten
105
- )
104
+ records = records.where(
105
+ terms.map { |term|
106
+ sql
107
+ }.join(' AND '),
108
+ *terms.map { |e| [e] * query_variables.size }.flatten
109
+ )
110
+ return records
111
+ end
106
112
  end
107
- records
108
113
  end
109
114
 
110
115
  def cm_date_and_range_filter(scope_value, records, filters)
@@ -123,7 +128,6 @@ module CmAdmin
123
128
 
124
129
  def cm_dropdown_filter(scope_value, records, filters)
125
130
  return nil if scope_value.nil?
126
-
127
131
  scope_value.each do |key, value|
128
132
  records = records.where(key => value) if value.present?
129
133
  end
@@ -10,7 +10,7 @@ module CmAdmin
10
10
 
11
11
  VALID_INPUT_TYPES = %i[
12
12
  integer decimal string single_select multi_select date date_time text
13
- single_file_upload multi_file_upload hidden rich_text check_box radio_button
13
+ single_file_upload multi_file_upload hidden rich_text check_box radio_button custom_string custom_date custom_single_select
14
14
  ].freeze
15
15
 
16
16
  def initialize(field_name, input_type, attributes = {})
@@ -25,7 +25,7 @@ module CmAdmin
25
25
  end
26
26
 
27
27
  def set_default_values
28
- self.disabled = false
28
+ self.disabled = lambda { |arg| return false } if display_if.nil?
29
29
  self.label = self.field_name.to_s.titleize
30
30
  self.input_type = :string
31
31
  self.html_attr = {}
@@ -1,3 +1,3 @@
1
1
  module CmAdmin
2
- VERSION = '1.3.3'
2
+ VERSION = '1.3.5'
3
3
  end
@@ -3,8 +3,14 @@ module CmAdmin
3
3
  module FormFieldHelper
4
4
  def input_field_for_column(form_obj, cm_field)
5
5
  return unless cm_field.display_if.call(form_obj.object)
6
-
7
- value = cm_field.helper_method ? send(cm_field.helper_method, form_obj.object, cm_field.field_name) : form_obj.object.send(cm_field.field_name)
6
+ if cm_field.helper_method
7
+ value = send(cm_field.helper_method, form_obj.object, cm_field.field_name)
8
+ elsif cm_field.input_type.to_s.include?('custom')
9
+ value = nil
10
+ else
11
+ value = form_obj.object.send(cm_field.field_name)
12
+ end
13
+ # value = cm_field.helper_method ? send(cm_field.helper_method, form_obj.object, cm_field.field_name) : form_obj.object.send(cm_field.field_name)
8
14
  is_required = form_obj.object._validators[cm_field.field_name].map(&:kind).include?(:presence)
9
15
  required_class = is_required ? 'required' : ''
10
16
  target_action = @model.available_actions.select { |x| x.name == cm_field.target[:action_name].to_s }.first if cm_field.target.present?
@@ -14,7 +20,7 @@ module CmAdmin
14
20
  def cm_integer_field(form_obj, cm_field, value, required_class, _target_action)
15
21
  form_obj.text_field cm_field.field_name,
16
22
  class: "field-control #{required_class}",
17
- disabled: cm_field.disabled,
23
+ disabled: cm_field.disabled.call(form_obj.object),
18
24
  value: value,
19
25
  placeholder: cm_field.placeholder,
20
26
  data: { behaviour: 'integer-only' }
@@ -23,7 +29,7 @@ module CmAdmin
23
29
  def cm_decimal_field(form_obj, cm_field, value, required_class, _target_action)
24
30
  form_obj.number_field cm_field.field_name,
25
31
  class: "field-control #{required_class}",
26
- disabled: cm_field.disabled,
32
+ disabled: cm_field.disabled.call(form_obj.object),
27
33
  value: value,
28
34
  placeholder: cm_field.placeholder,
29
35
  data: { behaviour: 'decimal-only' }
@@ -32,16 +38,23 @@ module CmAdmin
32
38
  def cm_string_field(form_obj, cm_field, value, required_class, _target_action)
33
39
  form_obj.text_field cm_field.field_name,
34
40
  class: "field-control #{required_class}",
35
- disabled: cm_field.disabled,
41
+ disabled: cm_field.disabled.call(form_obj.object),
36
42
  value: value,
37
43
  placeholder: cm_field.placeholder
38
44
  end
39
45
 
46
+ def cm_custom_string_field(form_obj, cm_field, value, required_class, _target_action)
47
+ text_field_tag cm_field.html_attr[:name] || cm_field.field_name,
48
+ value, class: "field-control #{required_class}",
49
+ disabled: cm_field.disabled.call(form_obj.object),
50
+ placeholder: cm_field.placeholder
51
+ end
52
+
40
53
  def cm_single_select_field(form_obj, cm_field, value, required_class, target_action)
41
54
  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
55
  { include_blank: cm_field.placeholder },
43
56
  class: "field-control #{required_class} select-2",
44
- disabled: cm_field.disabled,
57
+ disabled: cm_field.disabled.call(form_obj.object),
45
58
  data: {
46
59
  field_name: cm_field.field_name,
47
60
  field_type: 'linked-field',
@@ -50,18 +63,42 @@ module CmAdmin
50
63
  }
51
64
  end
52
65
 
66
+ def cm_custom_single_select_field(form_obj, cm_field, value, required_class, target_action)
67
+ select_tag cm_field.html_attr[:name] || cm_field.field_name,
68
+ options_for_select(select_collection_value(form_obj.object, cm_field)),
69
+ {
70
+ include_blank: cm_field.placeholder,
71
+ class: "field-control #{required_class} select-2",
72
+ disabled: cm_field.disabled.call(form_obj.object),
73
+ data: {
74
+ field_name: cm_field.field_name,
75
+ field_type: 'linked-field',
76
+ target_action: target_action&.name,
77
+ target_url: target_action&.name ? cm_admin.send("#{@model.name.underscore}_#{target_action&.name}_path") : ''
78
+ }
79
+ }
80
+ end
81
+
53
82
  def cm_multi_select_field(form_obj, cm_field, value, required_class, target_action)
54
83
  form_obj.select cm_field.field_name,
55
84
  options_for_select(select_collection_value(form_obj.object, cm_field), form_obj.object.send(cm_field.field_name)),
56
85
  { include_blank: cm_field.placeholder },
57
86
  class: "field-control #{required_class} select-2",
58
- disabled: cm_field.disabled, multiple: true
87
+ disabled: cm_field.disabled.call(form_obj.object), multiple: true
59
88
  end
60
89
 
61
90
  def cm_date_field(form_obj, cm_field, value, required_class, _target_action)
62
91
  form_obj.text_field cm_field.field_name,
63
92
  class: "field-control #{required_class}",
64
- disabled: cm_field.disabled,
93
+ disabled: cm_field.disabled.call(form_obj.object),
94
+ placeholder: cm_field.placeholder,
95
+ data: { behaviour: 'date-only' }
96
+ end
97
+
98
+ def cm_custom_date_field(form_obj, cm_field, value, required_class, _target_action)
99
+ text_field_tag cm_field.html_attr[:name] || cm_field.field_name, value&.strftime('%d-%m-%Y'),
100
+ class: "field-control #{required_class}",
101
+ disabled: cm_field.disabled.call(form_obj.object),
65
102
  value: value&.strftime('%d-%m-%Y'),
66
103
  placeholder: cm_field.placeholder,
67
104
  data: { behaviour: 'date-only' }
@@ -70,7 +107,7 @@ module CmAdmin
70
107
  def cm_date_time_field(form_obj, cm_field, value, required_class, _target_action)
71
108
  form_obj.text_field cm_field.field_name,
72
109
  class: "field-control #{required_class}",
73
- disabled: cm_field.disabled,
110
+ disabled: cm_field.disabled.call(form_obj.object),
74
111
  value: value,
75
112
  placeholder: cm_field.placeholder,
76
113
  data: { behaviour: 'date-time' }
@@ -90,14 +127,14 @@ module CmAdmin
90
127
 
91
128
  def cm_single_file_upload_field(form_obj, cm_field, _value, required_class, _target_action)
92
129
  content_tag(:div) do
93
- concat form_obj.file_field cm_field.field_name, class: "form-control #{required_class}", disabled: cm_field.disabled
130
+ concat form_obj.file_field cm_field.field_name, class: "field-control #{required_class}", disabled: cm_field.disabled.call(form_obj.object)
94
131
  concat attachment_list(form_obj, cm_field, _value, required_class, _target_action)
95
132
  end
96
133
  end
97
134
 
98
135
  def cm_multi_file_upload_field(form_obj, cm_field, _value, required_class, _target_action)
99
136
  content_tag(:div) do
100
- concat form_obj.file_field cm_field.field_name, multiple: true, class: "form-control #{required_class}", disabled: cm_field.disabled
137
+ concat form_obj.file_field cm_field.field_name, multiple: true, class: "field-control #{required_class}", disabled: cm_field.disabled.call(form_obj.object)
101
138
  concat attachment_list(form_obj, cm_field, _value, required_class, _target_action)
102
139
  end
103
140
  end
@@ -159,7 +196,7 @@ module CmAdmin
159
196
  form_obj.check_box cm_field.field_name,
160
197
  {
161
198
  class: "field-control cm-checkbox #{required_class} #{target_action.present? ? 'linked-field-request' : ''}",
162
- disabled: cm_field.disabled,
199
+ disabled: cm_field.disabled.call(form_obj.object),
163
200
  data: {
164
201
  field_name: cm_field.field_name,
165
202
  target_action: target_action&.name,
@@ -189,7 +226,7 @@ module CmAdmin
189
226
  concat form_obj.check_box cm_field.field_name,
190
227
  {
191
228
  class: "field-control cm-checkbox #{required_class} #{target_action.present? ? 'linked-field-request' : ''}",
192
- disabled: cm_field.disabled,
229
+ disabled: cm_field.disabled.call(form_obj.object),
193
230
  name: "#{@model.name.underscore}[#{cm_field.field_name}][]",
194
231
  data: {
195
232
  target_action: target_action&.name,
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.3.3
4
+ version: 1.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - sajinmp
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2023-11-02 00:00:00.000000000 Z
13
+ date: 2023-11-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails