cm-admin 1.2.6 → 1.2.8

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: 3fe51e58bb1ed8522c203af90ff0d19cd547066283c748fe85abcb23c8d4daaa
4
- data.tar.gz: 982a1b6707bbf563d7780eef2534295ea414970e76545f45df7d2878d0ed35f4
3
+ metadata.gz: ae65becafa199e298f7a291d69efcfb82bfd21ea14727d091bf0a6ec5040d642
4
+ data.tar.gz: 3b91abd5664970b2fcb6a4bcec060cd97d0461f62718a502fe0e78a5fe80762b
5
5
  SHA512:
6
- metadata.gz: 20bb85359b28a5457341007bd0e900bded0108375eaf43608a6f583e03651454f2f4aa163ef9ec1a8718ac73ae5b0cc500345112e53529b7e711cc9e8af1a723
7
- data.tar.gz: 39f51179a605e5d409bdc0418eb78a0f7370f439a7bd07f34acd2f5590e5e384316e38534db728ee21a4e099985408bcdf2a4b16ed27cad973dcd0b2e9b6ae71
6
+ metadata.gz: 60dbdf4ad38f21fc435d3eda1bf0dbff8498fee67fd43622f8853a29954cb6b31de0dcf4f58057fa02e9a7e87eb83f360617940d303fb23d7ca5e9e930891595
7
+ data.tar.gz: d251828725a456d7acc754a7006ab5c995f2bf8188b8f88e8559e9cd0620c603df64f74fa47b6435d2b717a67ba832c26e06a0354e54af0d3460b182568fd994
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cm-admin (1.2.6)
4
+ cm-admin (1.2.8)
5
5
  caxlsx_rails
6
6
  cocoon (~> 1.2.15)
7
7
  csv-importer (~> 0.8.2)
@@ -35,7 +35,9 @@ document.addEventListener("turbo:load", function () {
35
35
  flatpickr("[data-behaviour='filter'][data-filter-type='date']", {
36
36
  mode: 'range'
37
37
  })
38
- $('.select-2').select2();
38
+ $('.select-2').select2({
39
+ theme: "bootstrap-5",
40
+ });
39
41
  jqueryJgrowl()
40
42
  });
41
43
 
@@ -138,14 +138,14 @@ var replaceAccordionTitle = function (element) {
138
138
  var table_name = $(element).data("table-name");
139
139
  var model_name = $(element).data("model-name");
140
140
  $(element)
141
- .find(".accordion-item:visible")
141
+ .find("[data-card-name='" + table_name + "']")
142
142
  .each(function () {
143
143
  i++;
144
144
  var accordion_title = model_name + " " + i;
145
145
  var accordion_id = table_name + "-" + i;
146
- $(this).find(".accordion-button").text(accordion_title);
146
+ $(this).find(".card-title").text(accordion_title);
147
147
  $(this)
148
- .find(".accordion-button")
148
+ .find(".card-title")
149
149
  .attr("data-bs-target", "#" + accordion_id);
150
150
  $(this).find(".accordion-collapse").attr("id", accordion_id);
151
151
  });
@@ -49,32 +49,45 @@
49
49
  margin-top: 4px;
50
50
  }
51
51
 
52
- // Nested form styles
53
- .nested-field-wrapper {
54
- .nested-single-field {
55
- display: grid;
56
- grid-template-columns: 1fr 32px;
57
- align-items: center;
58
- width: 352px;
59
- margin-bottom: 8px;
60
- .field-remove-action {
61
- font-size: $t3-text;
62
- text-align: center;
63
- a {
64
- color: $primary-text-clr;
65
- &:hover {
66
- color: $primary-text-clr;
67
- }
52
+ //Form card UI
53
+ .form-card {
54
+ @extend .card, .mt-3;
55
+ background-color: var(--bs-gray-100);
56
+ background-blend-mode: multiply;
57
+ mix-blend-mode: multiply;
58
+ .card-title-wrapper {
59
+ @extend .d-flex, .align-items-center, .mb-3;
60
+ &:hover {
61
+ div:last-of-type {
62
+ visibility: visible;
68
63
  }
69
64
  }
70
65
  }
66
+ .card-title {
67
+ font-size: $t4-text;
68
+ color: var(--bs-tertiary-color);
69
+ margin: 0;
70
+ }
71
+ .card-delete {
72
+ visibility: hidden;
73
+ }
71
74
  }
72
75
 
73
76
  //Nested form table styles
74
- .nested-form-table {
75
- @extend .table, .table-light, .table-hover, .table-bordered;
76
- .item-delete-cell {
77
- vertical-align: middle;
78
- text-align: center;
77
+ .nested-form-table-wrapper {
78
+ overflow-y: scroll;
79
+ .nested-form-table {
80
+ @extend .table, .table-light, .table-hover, .table-bordered, .m-0;
81
+ width: max-content;
82
+ .item-delete-cell {
83
+ vertical-align: middle;
84
+ text-align: center;
85
+ }
79
86
  }
80
87
  }
88
+
89
+ .nested-table-footer {
90
+ padding: 8px;
91
+ border: 1px solid var(--bs-border-color);
92
+ border-top: 0;
93
+ }
@@ -124,44 +124,7 @@ a {
124
124
  }
125
125
 
126
126
  //select 2 styles
127
- .select2-container {
128
- .selection {
129
- .select2-selection {
130
- padding: 8px 16px;
131
- background-color: $white;
132
- border: 1px solid $grey-light-clr;
133
- border-radius: $radius-4;
134
- height: 40px;
135
- .select2-selection__rendered {
136
- padding-left: 0;
137
- @include font($size: $t4-text, $color: $primary-text-clr);
138
- line-height: 22px;
139
- }
140
- .select2-selection__arrow {
141
- top: 6px;
142
- }
143
- }
144
- }
145
- .select2-dropdown {
146
- border: 1px solid $grey-lighter-clr;
147
- box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.16);
148
- border-radius: $radius-4;
149
- .select2-results {
150
- .select2-results__options {
151
- .select2-results__option {
152
- padding: 9px 16px;
153
- @include font($size: $t4-text, $color: $primary-text-clr);
154
- line-height: 22px;
155
- }
156
- }
157
- .select2-results__option--highlighted.select2-results__option--selectable {
158
- background: $grey-lighter-clr;
159
- color: $primary-text-clr;
160
- }
161
- .select2-results__option--selected {
162
- color: $brand-color !important;
163
- background-color: $grey-lighter-clr !important;
164
- }
165
- }
166
- }
127
+ .select2-container--bootstrap-5 .select2-selection--single {
128
+ padding: 0.375rem 0.75rem 0.375rem 0.75rem !important;
129
+ background-position: right 0.75rem center !important;
167
130
  }
@@ -39,6 +39,9 @@
39
39
  &:nth-last-child(1) {
40
40
  margin-bottom: 0;
41
41
  }
42
+ &__title {
43
+ @include font($size: $t4-text, $color: $primary-text-clr, $weight: 600);
44
+ }
42
45
  &__label {
43
46
  @include font($size: $t4-text, $color: $ink-lighter-clr);
44
47
  }
@@ -282,6 +282,10 @@
282
282
  }
283
283
 
284
284
  //Nested table styles
285
- .nested-table {
286
- @extend .table, .table-light, .table-hover, .table-bordered;
285
+ .nested-table-wrapper {
286
+ overflow-y: scroll;
287
+ .nested-table {
288
+ @extend .table, .table-light, .table-hover, .table-bordered;
289
+ width: max-content;
290
+ }
287
291
  }
@@ -160,9 +160,9 @@ module CmAdmin
160
160
  nested_table_fields = []
161
161
  fields.each do |field|
162
162
  if field.class == CmAdmin::Models::Row
163
- nested_table_fields += field.sections.map(&:nested_table_fields).map(&:keys).flatten
163
+ nested_table_fields += field.sections.map(&:nested_table_fields).flatten
164
164
  elsif field.class == CmAdmin::Models::Section
165
- nested_table_fields += field.nested_table_fields.map(&:keys).flatten
165
+ nested_table_fields += field.nested_table_fields.flatten
166
166
  end
167
167
  end
168
168
  nested_table_fields.flatten
@@ -173,10 +173,11 @@ module CmAdmin
173
173
  authorize controller_name.classify.constantize, policy_class: "CmAdmin::#{controller_name.classify}Policy".constantize if defined? "CmAdmin::#{controller_name.classify}Policy".constantize
174
174
  aar_model = request.url.split('/')[-2].classify.constantize if params[:aar_id]
175
175
  @associated_ar_object = aar_model.find(params[:aar_id]) if params[:aar_id]
176
- nested_tables = get_nested_table_fields(@model.available_fields[:new])
177
- nested_tables += get_nested_table_fields(@model.available_fields[:edit])
176
+ nested_fields = get_nested_table_fields(@model.available_fields[:new])
177
+ nested_fields += get_nested_table_fields(@model.available_fields[:edit])
178
178
  @reflections = @model.ar_model.reflect_on_all_associations
179
- nested_tables.each do |table_name|
179
+ nested_fields.each do |nested_field|
180
+ table_name = nested_field.field_name
180
181
  reflection = @reflections.select {|x| x if x.name == table_name}.first
181
182
  if reflection.macro == :has_many
182
183
  @ar_object.send(table_name).build if action_name == "new" || action_name == "edit"
@@ -255,6 +256,27 @@ module CmAdmin
255
256
  return filtered_result
256
257
  end
257
258
 
259
+ def generate_nested_params(nested_table_field)
260
+ if nested_table_field.parent_field
261
+ ar_model = nested_table_field.parent_field.to_s.classify.constantize
262
+ table_name = ar_model.reflections[nested_table_field.field_name.to_s].klass.table_name
263
+ else
264
+ table_name = @model.ar_model.reflections[nested_table_field.field_name.to_s].klass.table_name
265
+ end
266
+ column_names = table_name.to_s.classify.constantize.column_names
267
+ column_names = column_names.map {|column_name| column_name.gsub('_cents', '') }
268
+ column_names = column_names.reject { |column_name| CmAdmin::REJECTABLE_FIELDS.include?(column_name) }.map(&:to_sym) + [:id, :_destroy]
269
+ if nested_table_field.associated_fields
270
+ nested_table_field.associated_fields.each do |associated_field|
271
+ column_names << generate_nested_params(associated_field)
272
+ end
273
+ end
274
+ Hash[
275
+ "#{table_name}_attributes",
276
+ column_names
277
+ ]
278
+ end
279
+
258
280
  def resource_params(params)
259
281
  columns = @model.ar_model.columns_hash.map {|key, ar_adapter|
260
282
  ar_adapter.sql_type_metadata.sql_type.ends_with?('[]') ? Hash[ar_adapter.name, []] : ar_adapter.name.to_sym
@@ -269,21 +291,17 @@ module CmAdmin
269
291
  Hash[x.name.to_s.gsub('_attachments', ''), []]
270
292
  end
271
293
  }.compact
272
- nested_tables = get_nested_table_fields(@model.available_fields[:new])
273
- nested_tables += get_nested_table_fields(@model.available_fields[:edit])
274
- nested_fields = nested_tables.uniq.map {|assoc_name|
275
- table_name = @model.ar_model.reflections[assoc_name.to_s].klass.table_name
276
- column_names = table_name.to_s.classify.constantize.column_names
277
- column_names = column_names.map {|column_name| column_name.gsub('_cents', '') }
278
- Hash[
279
- "#{table_name}_attributes",
280
- column_names.reject { |column_name| CmAdmin::REJECTABLE_FIELDS.include?(column_name) }.map(&:to_sym) + [:id, :_destroy]
281
- ]
294
+ nested_table_fields = get_nested_table_fields(@model.available_fields[:new])
295
+ nested_table_fields += get_nested_table_fields(@model.available_fields[:edit])
296
+ nested_fields = nested_table_fields.uniq.map {|nested_table_field|
297
+ generate_nested_params(nested_table_field)
282
298
  }
283
299
  permittable_fields += nested_fields
284
300
  @model.ar_model.columns.map { |col| permittable_fields << col.name.split('_cents') if col.name.include?('_cents') }
285
301
  params.require(@model.name.underscore.to_sym).permit(*permittable_fields)
286
302
  end
287
303
 
304
+
305
+
288
306
  end
289
307
  end
@@ -1,5 +1,7 @@
1
1
  $(document).on('turbolinks:load', function () {
2
- $('.select-2').select2();
2
+ $('.select-2').select2({
3
+ theme: "bootstrap-5",
4
+ });
3
5
  flatpickr("[data-behaviour='date-only']", {
4
6
  dateFormat: "d-m-Y"
5
7
  })
@@ -15,12 +15,13 @@ class CmAdmin::BulkActionProcessor
15
15
  column_name = @model.available_fields[:index].first.field_name
16
16
  begin
17
17
  @current_action.code_block.call(id)
18
+ @error_message = nil
18
19
  rescue NoMethodError, NameError => e
19
20
  @error_message = "#{e.message.slice(0..(e.message.index(' for')))} at #{ar_object.send(column_name)}"
20
21
  rescue ActiveRecord::RecordInvalid => e
21
22
  @error_message = "#{e.message} at #{ar_object.send(column_name)}"
22
23
  rescue StandardError => e
23
- @error_message = e.message
24
+ @error_message = "#{ar_object.send(column_name)} - #{e.message}"
24
25
  end
25
26
  @invalid_records << OpenStruct.new({ row_identifier: ar_object.send(column_name), error_message: @error_message }) if @error_message
26
27
  end
@@ -1,7 +1,26 @@
1
- tr.nested-fields
2
- td.item-delete-cell
3
- - if @reflections.select {|x| x if x.name == assoc_name}.first.macro == :has_many
1
+ - if nested_table_field.display_type == :table
2
+ tr.nested-fields
3
+ td.item-delete-cell
4
4
  = link_to_remove_association "", f, class: 'fa-regular fa-trash-can btn-ghost'
5
- - fields.each do |field|
6
- td
7
- = input_field_for_column(f, field)
5
+ - nested_table_field.fields.each do |field|
6
+ td
7
+ = input_field_for_column(f, field)
8
+ - else
9
+ .form-card.nested-fields
10
+ .card-body
11
+ .card-item data-card-name=assoc_name
12
+ .card-title-wrapper
13
+ h6.card-title
14
+ | Title 1
15
+ .card-delete
16
+ = link_to_remove_association "", f, class: 'fa-regular fa-trash-can btn-ghost'
17
+ div
18
+ - nested_table_field.fields.each do |field|
19
+ .form-field
20
+ .field-label-wrapper
21
+ label.field-label = field.field_name.to_s.titleize
22
+ .field-input-wrapper
23
+ = input_field_for_column(f, field)
24
+ - if nested_table_field.associated_fields.present?
25
+ - nested_table_field.associated_fields.each do |associated_nested_field|
26
+ = render partial: '/cm_admin/main/nested_table_form', locals: { f: f, nested_table_field: associated_nested_field }
@@ -1,19 +1,32 @@
1
- - table_name = @ar_object._reflections[assoc_name.to_s].klass.table_name.to_sym
2
- .nested-field-wrapper data-table-name=assoc_name data-model-name=assoc_name.to_s.classify
3
- label.field-label = assoc_name.to_s.titleize
4
- - fields = section.nested_table_fields[assoc_name]
5
- table.nested-form-table
6
- thead
7
- tr
8
- th
9
- |
10
- - fields.each do |field|
11
- th
12
- = field.field_name.to_s.titleize
13
- tbody.insert-cocoon-position
1
+ - assoc_name = nested_table_field.field_name
2
+ - table_name = f.object._reflections[assoc_name.to_s].klass.table_name.to_sym
3
+ - if nested_table_field.display_type == :table
4
+ .nested-field-wrapper data-table-name=assoc_name data-model-name=assoc_name.to_s.classify
5
+ / label.field-label = nested_table_field.label.to_s.titleize
6
+ - uniq_no = Random.rand(10000)
7
+ .nested-form-table-wrapper
8
+ table.nested-form-table
9
+ thead
10
+ tr
11
+ th
12
+ |
13
+ - nested_table_field.fields.each do |field|
14
+ th
15
+ = field.field_name.to_s.titleize
16
+ tbody class="insert-cocoon-position-#{uniq_no}"
17
+ = f.fields_for table_name do |record|
18
+ - if record.object.persisted? || @ar_object.errors.present?
19
+ = render partial: '/cm_admin/main/nested_fields', locals: { f: record, assoc_name: assoc_name, nested_table_field: nested_table_field }
20
+ - if f.object._reflections[assoc_name.to_s]&.macro == :has_many
21
+ .nested-table-footer
22
+ = link_to_add_association "+ Add #{assoc_name.to_s.titleize}", f, table_name, partial: '/cm_admin/main/nested_fields', render_options: {locals: { assoc_name: assoc_name, nested_table_field: nested_table_field }}, data: { association_insertion_node: ".insert-cocoon-position-#{uniq_no}", association_insertion_method: 'append' }, class: 'btn-primary'
23
+ - else
24
+ .nested-field-wrapper data-table-name=assoc_name data-model-name=assoc_name.to_s.classify
25
+ / label.nested-field-label = assoc_name.to_s.titleize
26
+ .nested-form
14
27
  = f.fields_for table_name do |record|
15
- - if record.object.persisted? || @ar_object.errors.present?
16
- = render partial: '/cm_admin/main/nested_fields', locals: { f: record, assoc_name: assoc_name, section: section, fields: fields }
17
- - if @reflections.select {|x| x if x.name == assoc_name}.first.macro == :has_many
18
- .links
19
- = link_to_add_association "+ Add #{assoc_name.to_s.titleize}", f, table_name, partial: '/cm_admin/main/nested_fields', render_options: {locals: { assoc_name: assoc_name, section: section, fields: fields }}, data: { association_insertion_node: '.insert-cocoon-position', association_insertion_method: 'append' }, class: 'btn-primary'
28
+ - if record.object.persisted?
29
+ = render partial: '/cm_admin/main/nested_fields', locals: { f: record, assoc_name: assoc_name, nested_table_field: nested_table_field }
30
+ - if f.object._reflections[assoc_name.to_s]&.macro == :has_many
31
+ .links.mt-3
32
+ = link_to_add_association "+ Add #{assoc_name.to_s.titleize}", f, table_name, partial: '/cm_admin/main/nested_fields', render_options: {locals: { assoc_name: assoc_name, nested_table_field: nested_table_field }}, class: 'd-inline-block btn-primary mt-2'
@@ -1,17 +1,30 @@
1
- .card-info
2
- p.card-info__label = table_name.to_s.titleize
3
- .card-info__description
4
- - associated_records = @ar_object.send(table_name)
5
- table.nested-table
6
- thead
7
- tr
8
- - table_fields.each do |field|
9
- th scope="col"
10
- = field.label
11
- tbody
12
- - associated_records.each do |record|
1
+ - associated_records = ar_object.send(nested_field.field_name)
2
+ - if nested_field.display_type == :table
3
+ div class="#{nested_field.label ? 'card-info' : ''}"
4
+ - if nested_field.label
5
+ p.card-info__label = nested_field.label.to_s.titleize
6
+ .card-info__description.nested-table-wrapper
7
+ table.nested-table
8
+ thead
13
9
  tr
14
- - table_fields.each do |field|
15
- td
16
- = record.send(field.field_name)
17
-
10
+ - nested_field.fields.each do |field|
11
+ th scope="col"
12
+ = field.label || field.field_name.to_s.titleize
13
+ tbody
14
+ - associated_records.each do |record|
15
+ tr
16
+ - nested_field.fields.each do |field|
17
+ td
18
+ = record.send(field.field_name)
19
+ - else
20
+ - associated_records.each do |record|
21
+ .card.mb-3
22
+ .card-body
23
+ .card-info
24
+ .card-info__title = nested_section_title(record, nested_field)
25
+ - nested_field.fields.each do |field|
26
+ = show_field(record, field)
27
+
28
+ - if nested_field.associated_fields.present?
29
+ - nested_field.associated_fields.each do |associated_nested_field|
30
+ = render partial: 'cm_admin/main/nested_table_section', locals: { nested_field: associated_nested_field, ar_object: record }
@@ -6,5 +6,5 @@
6
6
  .card-body
7
7
  - section.section_fields.each do |field|
8
8
  = show_field(@ar_object, field)
9
- - section.nested_table_fields.each do |key, value|
10
- = render partial: 'cm_admin/main/nested_table_section', locals: { table_name: key, table_fields: value }
9
+ - section.nested_table_fields.each do |nested_field|
10
+ = render partial: 'cm_admin/main/nested_table_section', locals: { nested_field: nested_field, ar_object: @ar_object }
@@ -19,6 +19,10 @@ html
19
19
  link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" /
20
20
 
21
21
  script src="https://raw.githack.com/SortableJS/Sortable/master/Sortable.js"
22
+
23
+ link[rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.min.css"]
24
+ link[rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.rtl.min.css"]
25
+
22
26
  body
23
27
  .cm-admin
24
28
  = render 'layouts/left_sidebar_nav'
@@ -3,6 +3,7 @@ require_relative 'models/action'
3
3
  require_relative 'models/importer'
4
4
  require_relative 'models/custom_action'
5
5
  require_relative 'models/bulk_action'
6
+ require_relative 'models/nested_field'
6
7
  require_relative 'models/field'
7
8
  require_relative 'models/form_field'
8
9
  require_relative 'models/blocks'
@@ -0,0 +1,25 @@
1
+ module CmAdmin
2
+ module Models
3
+ class NestedField
4
+
5
+ # NestedField is like a container to hold Field and FormField object
6
+
7
+ attr_accessor :field_name, :display_type, :fields, :associated_fields, :parent_field, :header, :label
8
+
9
+ def initialize(field_name, attributes={})
10
+ @field_name = field_name
11
+ set_default_values
12
+ attributes.each do |key, value|
13
+ self.send("#{key.to_s}=", value)
14
+ end
15
+ end
16
+
17
+ def set_default_values
18
+ self.display_type = :table
19
+ self.fields = []
20
+ self.associated_fields = []
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -7,41 +7,47 @@ module CmAdmin
7
7
  # These list of fields are iterated and displayed on show/new/edit page.
8
8
  # It also contains rows, which contains sections and fields.
9
9
 
10
- attr_accessor :section_name, :section_fields, :display_if, :current_action, :cm_model, :nested_table_fields, :rows, :col_size
10
+ attr_accessor :section_name, :section_fields, :display_if, :current_action, :cm_model, :nested_table_fields, :rows, :col_size, :current_nested_field
11
11
 
12
12
  def initialize(section_name, current_action, cm_model, display_if, col_size, &block)
13
13
  @section_fields = []
14
14
  @rows = []
15
- @nested_table_fields = {}
15
+ @nested_table_fields = []
16
16
  @col_size = col_size
17
17
  @section_name = section_name
18
18
  @current_action = current_action
19
19
  @cm_model = cm_model
20
20
  @display_if = display_if || lambda { |arg| return true }
21
+ @current_nested_field = nil
21
22
  instance_eval(&block)
22
23
  end
23
24
 
24
25
  def field(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)
26
+ if @current_nested_field
27
+ @current_nested_field.fields << CmAdmin::Models::Field.new(field_name, options)
28
28
  else
29
29
  @section_fields << CmAdmin::Models::Field.new(field_name, options)
30
30
  end
31
31
  end
32
32
 
33
33
  def form_field(field_name, options={}, arg=nil)
34
- if @current_action.is_nested_field
35
- @nested_table_fields[@current_action.nested_table_name] ||= []
36
- @nested_table_fields[@current_action.nested_table_name] << CmAdmin::Models::FormField.new(field_name, options[:input_type], options)
34
+ if @current_nested_field
35
+ @current_nested_field.fields << CmAdmin::Models::FormField.new(field_name, options[:input_type], options)
37
36
  else
38
37
  @section_fields << CmAdmin::Models::FormField.new(field_name, options[:input_type], options)
39
38
  end
40
39
  end
41
40
 
42
- def nested_form_field(field_name, &block)
43
- @current_action.is_nested_field = true
44
- @current_action.nested_table_name = field_name
41
+ def nested_form_field(field_name, options={}, &block)
42
+ # @current_action.is_nested_field = true
43
+ # @current_action.nested_table_name = field_name
44
+ nested_field = CmAdmin::Models::NestedField.new(field_name, options)
45
+ if nested_field.parent_field
46
+ @current_nested_field.associated_fields << nested_field
47
+ else
48
+ @nested_table_fields << nested_field
49
+ end
50
+ @current_nested_field = nested_field
45
51
  yield
46
52
  end
47
53
 
@@ -1,3 +1,3 @@
1
1
  module CmAdmin
2
- VERSION = '1.2.6'
2
+ VERSION = '1.2.8'
3
3
  end
@@ -116,8 +116,8 @@ module CmAdmin
116
116
 
117
117
  def set_nested_form_fields(form_obj, section)
118
118
  content_tag(:div) do
119
- section.nested_table_fields.keys.each do |key|
120
- concat(render partial: '/cm_admin/main/nested_table_form', locals: { f: form_obj, assoc_name: key, section: section })
119
+ section.nested_table_fields.each do |nested_table_field|
120
+ concat(render partial: '/cm_admin/main/nested_table_form', locals: { f: form_obj, nested_table_field: nested_table_field })
121
121
  end
122
122
  end
123
123
  end
@@ -48,7 +48,8 @@ module CmAdmin
48
48
  when :modal
49
49
  custom_modal_button(custom_action)
50
50
  when :page
51
- link_to custom_action_title(custom_action), "#{@model.ar_model.table_name}/#{custom_action.path}", class: 'btn-secondary ms-2', method: custom_action.verb
51
+ path = cm_admin.send("#{@model.name.underscore}_#{custom_action.name}_path", @ar_object.id)
52
+ link_to custom_action_title(custom_action), path, class: 'btn-secondary ms-2', method: custom_action.verb
52
53
  end
53
54
  end
54
55
  end
@@ -92,6 +93,14 @@ module CmAdmin
92
93
  return current_user.full_name if defined?(current_user.full_name)
93
94
  current_user.email.split('@').first
94
95
  end
96
+
97
+ def nested_section_title(record, nested_form_field)
98
+ if nested_form_field.header.present?
99
+ record.send(nested_form_field.header)
100
+ else
101
+ nested_form_field.field_name.to_s.titleize
102
+ end
103
+ end
95
104
  end
96
105
  end
97
106
  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.2.6
4
+ version: 1.2.8
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-10-12 00:00:00.000000000 Z
13
+ date: 2023-10-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -414,6 +414,7 @@ files:
414
414
  - lib/cm_admin/models/filter.rb
415
415
  - lib/cm_admin/models/form_field.rb
416
416
  - lib/cm_admin/models/importer.rb
417
+ - lib/cm_admin/models/nested_field.rb
417
418
  - lib/cm_admin/models/row.rb
418
419
  - lib/cm_admin/models/section.rb
419
420
  - lib/cm_admin/models/tab.rb