cm-admin 0.9.1 → 1.0.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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +82 -0
  3. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +21 -0
  5. data/Gemfile.lock +95 -8
  6. data/app/assets/config/cm_admin_manifest.js +1 -0
  7. data/app/assets/javascripts/cm_admin/application.js +5 -0
  8. data/app/{javascript/packs → assets/javascripts}/cm_admin/exports.js +0 -0
  9. data/app/{javascript/packs → assets/javascripts}/cm_admin/filters.js +20 -31
  10. data/app/{javascript/packs → assets/javascripts}/cm_admin/form_validation.js +0 -0
  11. data/app/{javascript/packs → assets/javascripts}/cm_admin/quick_search.js +16 -3
  12. data/app/assets/javascripts/cm_admin/scaffolds.js +44 -0
  13. data/app/assets/stylesheets/cm_admin/components/_input.scss +12 -0
  14. data/app/controllers/cm_admin/resource_controller.rb +10 -7
  15. data/app/helpers/cm_admin/application_helper.rb +0 -3
  16. data/app/javascript/packs/cm_admin/application.js +4 -4
  17. data/app/javascript/packs/cm_admin/scaffolds.js +51 -0
  18. data/app/views/layouts/cm_admin.html.slim +9 -4
  19. data/app/views/layouts/static.html.slim +3 -2
  20. data/bin/importmap +15 -0
  21. data/bin/webpack +8 -8
  22. data/bin/webpack-dev-server +9 -9
  23. data/cm_admin.gemspec +3 -0
  24. data/config/importmap.rb +12 -0
  25. data/config/webpack/development.js +1 -1
  26. data/config/webpack/environment.js +1 -1
  27. data/config/webpack/production.js +1 -1
  28. data/config/webpacker.yml +2 -2
  29. data/lib/cm_admin/configuration.rb +5 -2
  30. data/lib/cm_admin/engine.rb +36 -15
  31. data/lib/cm_admin/models/form_field.rb +8 -2
  32. data/lib/cm_admin/version.rb +1 -1
  33. data/lib/cm_admin/version_manager.rb +21 -0
  34. data/lib/cm_admin/view_helpers/form_field_helper.rb +183 -35
  35. data/lib/cm_admin.rb +7 -2
  36. data/lib/generators/cm_admin/templates/actiontext.scss +0 -1
  37. data/lib/tasks/webpack_install.rake +15 -13
  38. data/package-lock.json +18 -27
  39. data/yarn.lock +9 -9
  40. metadata +43 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 785e0d596039b668a8011b689eab464ebf3c0b6133d802d115d80a2916e93e09
4
- data.tar.gz: 3cd13d18882cf7bdc31438c95498010ea776eeb3f9fdc3667a92b875800cb09b
3
+ metadata.gz: 28ba47b6a7c02c8edad75f7407f3c6c65cb2f59b44aea6952c7abbc174595ecc
4
+ data.tar.gz: 7216647324f0791c1090ae0f0fd9f252b2c1d53939553dfb4c9c390d99dc68b3
5
5
  SHA512:
6
- metadata.gz: 66e662348351cdc07436a127fae08df52f430e31ec8e0410fd9b3c76307d111c261cd1349d0d4f6497b605a34ee2622ab113a8d909792e03065cbf66c33afc68
7
- data.tar.gz: '0914c2ce34558dbe09a7b10e4f6777d46c37ec3fb0aeae30b5c9fefc45a2611236b21d32d36e8f94f653c0c1fa37346f97e7f6ec33ceff8aa0376a1b5e5a7783'
6
+ metadata.gz: f2f58b8468437f6785010ba74c00210332eabc56de6167503c91ca9df6c07a3ef6709f8b943f2de156aeea897564e17564aa19e70638ca08d28fb1fe212803c3
7
+ data.tar.gz: 1847f6e693831247dee15f416e537c39f1a6f3725e934774dbed4f76bf879ebfba16fd69324280594232638ce559092fb09b45bf4d22442a2e1ffb608b87bf02
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: 🐛 Bug report
3
+ about: Report a reproducible bug and help us improve.
4
+ title: '[Bug]: '
5
+ labels: 'bug'
6
+ assignees:
7
+ - anbublacky
8
+ - AdityaTiwari2102
9
+ ---
10
+
11
+ <!-- Before creating a bug report, try disabling browser extensions to see if the bug is still present. -->
12
+
13
+ <!-- If you have added and/or updated any DSL related code try restarting the server. -->
14
+
15
+ ### Describe the bug
16
+
17
+ <!-- A clear and concise description of what the bug is. -->
18
+
19
+ ### Logs
20
+ <details>
21
+ <summary>Error logs</summary>
22
+
23
+ ```
24
+ Place your error logs here
25
+ ```
26
+ </details>
27
+
28
+ ### To Reproduce
29
+
30
+ Steps to reproduce the behavior:
31
+
32
+ 1. Add this configuration '...'
33
+ 2. Go to '...'
34
+ 3. Click on '....'
35
+ 4. Scroll down to '....'
36
+ 5. See error
37
+
38
+ ### Expected behavior
39
+
40
+ <!-- A clear and concise description of what you expected to happen. -->
41
+
42
+ ### Screenshots & recordings
43
+
44
+ <!-- If applicable, add screenshots to help explain your problem. -->
45
+
46
+ ### System configuration
47
+ You can help us to understand your problem if you will share some very
48
+ useful information about your project environment (don't forget to
49
+ remove any confidential data if it exists).
50
+
51
+ **CM Admin version**:
52
+
53
+ **Rails version**:
54
+ <!-- Requirement is v6.0+ -->
55
+
56
+ **Ruby version**:
57
+ <!-- Requirement is v2.7+ -->
58
+
59
+ **OS, version**:
60
+
61
+ **Browser, version**:
62
+
63
+ ### Additional context
64
+
65
+ <!-- Add any other context about the problem or helpful links here. -->
66
+
67
+ #### Impact
68
+ <!--
69
+ How much are you impacted by this issue?
70
+ Please set a level of Impact and Urgency
71
+ (Mark [x] inside the brackets)
72
+ -->
73
+
74
+ - [ ] High impact
75
+ - [ ] Medium impact
76
+ - [ ] Low impact
77
+
78
+ #### Urgency
79
+
80
+ - [ ] High urgency
81
+ - [ ] Medium urgency
82
+ - [ ] low urgency
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: 🚀 Discussions and Proposals
4
+ url: https://github.com/commutatus/cm-admin/discussions
5
+ about: Visit our GitHub Discussions page to suggest an idea to make CM Admin better.
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: 💡 Feature request
3
+ about: Request a feature that helps you built the platform better.
4
+ title: ''
5
+ labels: 'enhancement'
6
+ assignees:
7
+ - anbublacky
8
+ - AdityaTiwari2102
9
+ ---
10
+
11
+ ### Feature
12
+ <!-- A clear and concise description of what the feature is. -->
13
+
14
+ ### Current workarounds
15
+ <!-- Is there a way to achieve this behavior at the moment through some hack? -->
16
+
17
+ ### Screenshots or screen recordings
18
+ <!-- If applicable, add screenshots or recordings to help explain your problem. -->
19
+
20
+ ### Additional context
21
+ <!-- Have you seen this behavior somewhere else where we can test it? -->
data/Gemfile.lock CHANGED
@@ -1,19 +1,46 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cm-admin (0.9.1)
4
+ cm-admin (7.0.2)
5
5
  caxlsx_rails
6
6
  cocoon (~> 1.2.15)
7
7
  csv-importer (~> 0.8.2)
8
+ importmap-rails
8
9
  local_time (~> 2.1.0)
9
10
  pagy (~> 4.11.0)
10
11
  pundit (~> 2.2.0)
12
+ rails (>= 6.0)
11
13
  slim (~> 4.1.0)
12
14
  webpacker (~> 5.4.3)
13
15
 
14
16
  GEM
15
17
  remote: https://rubygems.org/
16
18
  specs:
19
+ actioncable (7.0.3.1)
20
+ actionpack (= 7.0.3.1)
21
+ activesupport (= 7.0.3.1)
22
+ nio4r (~> 2.0)
23
+ websocket-driver (>= 0.6.1)
24
+ actionmailbox (7.0.3.1)
25
+ actionpack (= 7.0.3.1)
26
+ activejob (= 7.0.3.1)
27
+ activerecord (= 7.0.3.1)
28
+ activestorage (= 7.0.3.1)
29
+ activesupport (= 7.0.3.1)
30
+ mail (>= 2.7.1)
31
+ net-imap
32
+ net-pop
33
+ net-smtp
34
+ actionmailer (7.0.3.1)
35
+ actionpack (= 7.0.3.1)
36
+ actionview (= 7.0.3.1)
37
+ activejob (= 7.0.3.1)
38
+ activesupport (= 7.0.3.1)
39
+ mail (~> 2.5, >= 2.5.4)
40
+ net-imap
41
+ net-pop
42
+ net-smtp
43
+ rails-dom-testing (~> 2.0)
17
44
  actionpack (7.0.3.1)
18
45
  actionview (= 7.0.3.1)
19
46
  activesupport (= 7.0.3.1)
@@ -21,12 +48,34 @@ GEM
21
48
  rack-test (>= 0.6.3)
22
49
  rails-dom-testing (~> 2.0)
23
50
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
51
+ actiontext (7.0.3.1)
52
+ actionpack (= 7.0.3.1)
53
+ activerecord (= 7.0.3.1)
54
+ activestorage (= 7.0.3.1)
55
+ activesupport (= 7.0.3.1)
56
+ globalid (>= 0.6.0)
57
+ nokogiri (>= 1.8.5)
24
58
  actionview (7.0.3.1)
25
59
  activesupport (= 7.0.3.1)
26
60
  builder (~> 3.1)
27
61
  erubi (~> 1.4)
28
62
  rails-dom-testing (~> 2.0)
29
63
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
64
+ activejob (7.0.3.1)
65
+ activesupport (= 7.0.3.1)
66
+ globalid (>= 0.3.6)
67
+ activemodel (7.0.3.1)
68
+ activesupport (= 7.0.3.1)
69
+ activerecord (7.0.3.1)
70
+ activemodel (= 7.0.3.1)
71
+ activesupport (= 7.0.3.1)
72
+ activestorage (7.0.3.1)
73
+ actionpack (= 7.0.3.1)
74
+ activejob (= 7.0.3.1)
75
+ activerecord (= 7.0.3.1)
76
+ activesupport (= 7.0.3.1)
77
+ marcel (~> 1.0)
78
+ mini_mime (>= 1.1.0)
30
79
  activesupport (7.0.3.1)
31
80
  concurrent-ruby (~> 1.0, >= 1.0.2)
32
81
  i18n (>= 1.6, < 2)
@@ -53,25 +102,45 @@ GEM
53
102
  crass (1.0.6)
54
103
  csv-importer (0.8.2)
55
104
  virtus
105
+ date (3.3.3)
56
106
  descendants_tracker (0.0.4)
57
107
  thread_safe (~> 0.3, >= 0.3.1)
58
108
  diff-lcs (1.4.4)
59
109
  erubi (1.11.0)
110
+ globalid (1.0.0)
111
+ activesupport (>= 5.0)
60
112
  htmlentities (4.3.4)
61
113
  i18n (1.11.0)
62
114
  concurrent-ruby (~> 1.0)
63
115
  ice_nine (0.11.2)
116
+ importmap-rails (1.1.5)
117
+ actionpack (>= 6.0.0)
118
+ railties (>= 6.0.0)
64
119
  json (2.6.2)
65
120
  local_time (2.1.0)
66
- loofah (2.19.0)
121
+ loofah (2.19.1)
67
122
  crass (~> 1.0.2)
68
123
  nokogiri (>= 1.5.9)
124
+ mail (2.8.0)
125
+ mini_mime (>= 0.1.1)
126
+ net-imap
127
+ net-pop
128
+ net-smtp
69
129
  marcel (1.0.2)
70
130
  method_source (1.0.0)
71
- mini_portile2 (2.8.0)
131
+ mini_mime (1.1.2)
72
132
  minitest (5.16.2)
73
- nokogiri (1.13.9)
74
- mini_portile2 (~> 2.8.0)
133
+ net-imap (0.3.3)
134
+ date
135
+ net-protocol
136
+ net-pop (0.1.2)
137
+ net-protocol
138
+ net-protocol (0.2.1)
139
+ timeout
140
+ net-smtp (0.3.3)
141
+ net-protocol
142
+ nio4r (2.5.8)
143
+ nokogiri (1.13.10-arm64-darwin)
75
144
  racc (~> 1.4)
76
145
  pagy (4.11.0)
77
146
  parallel (1.22.1)
@@ -79,17 +148,31 @@ GEM
79
148
  ast (~> 2.4.1)
80
149
  pundit (2.2.0)
81
150
  activesupport (>= 3.0.0)
82
- racc (1.6.0)
151
+ racc (1.6.1)
83
152
  rack (2.2.4)
84
153
  rack-proxy (0.7.4)
85
154
  rack
86
155
  rack-test (2.0.2)
87
156
  rack (>= 1.3)
157
+ rails (7.0.3.1)
158
+ actioncable (= 7.0.3.1)
159
+ actionmailbox (= 7.0.3.1)
160
+ actionmailer (= 7.0.3.1)
161
+ actionpack (= 7.0.3.1)
162
+ actiontext (= 7.0.3.1)
163
+ actionview (= 7.0.3.1)
164
+ activejob (= 7.0.3.1)
165
+ activemodel (= 7.0.3.1)
166
+ activerecord (= 7.0.3.1)
167
+ activestorage (= 7.0.3.1)
168
+ activesupport (= 7.0.3.1)
169
+ bundler (>= 1.15.0)
170
+ railties (= 7.0.3.1)
88
171
  rails-dom-testing (2.0.3)
89
172
  activesupport (>= 4.2.0)
90
173
  nokogiri (>= 1.6)
91
- rails-html-sanitizer (1.4.3)
92
- loofah (~> 2.3)
174
+ rails-html-sanitizer (1.4.4)
175
+ loofah (~> 2.19, >= 2.19.1)
93
176
  railties (7.0.3.1)
94
177
  actionpack (= 7.0.3.1)
95
178
  activesupport (= 7.0.3.1)
@@ -143,6 +226,7 @@ GEM
143
226
  thor (1.2.1)
144
227
  thread_safe (0.3.6)
145
228
  tilt (2.0.10)
229
+ timeout (0.3.1)
146
230
  tzinfo (2.0.4)
147
231
  concurrent-ruby (~> 1.0)
148
232
  unicode-display_width (2.3.0)
@@ -155,6 +239,9 @@ GEM
155
239
  rack-proxy (>= 0.6.1)
156
240
  railties (>= 5.2)
157
241
  semantic_range (>= 2.3.0)
242
+ websocket-driver (0.7.5)
243
+ websocket-extensions (>= 0.1.0)
244
+ websocket-extensions (0.1.5)
158
245
  zeitwerk (2.6.6)
159
246
 
160
247
  PLATFORMS
@@ -0,0 +1 @@
1
+ //= link_tree ../javascripts/cm_admin
@@ -0,0 +1,5 @@
1
+ import './scaffolds.js';
2
+ import './form_validation.js'
3
+ import './quick_search.js'
4
+ import './filters.js'
5
+ import './exports.js'
@@ -1,5 +1,21 @@
1
1
  var currentRequest = null;
2
2
 
3
+ var CmFilter = {
4
+ // Generate or remove elements of the dropdown based on the search value.
5
+ dropdown_search: function(element) {
6
+ var filter = element.val().toUpperCase();
7
+ var dropdownElements = element.parents(':nth(1)').find('.list-area').children();
8
+ for (var i = 0; i < dropdownElements.length; i++) {
9
+ var txtValue = $(dropdownElements[i]).children().text();
10
+ if (txtValue.toUpperCase().indexOf(filter) > -1) {
11
+ $(dropdownElements[i]).css('display', 'flex');
12
+ } else {
13
+ $(dropdownElements[i]).css('display', 'none');
14
+ }
15
+ }
16
+ }
17
+ }
18
+
3
19
  // Main method which will structure the existing filter values with the newly
4
20
  // applied filter. Send and receive the value from the backend.
5
21
  var getFilteredData = function(filterType, filterValue, filterColumn=null) {
@@ -40,7 +56,7 @@ var getFilteredData = function(filterType, filterValue, filterColumn=null) {
40
56
  }
41
57
  filterParams = jQuery.param(queryString)
42
58
  var availableParams = searchParams + '&' + filterParams
43
- queryString = getParamsAsObject(availableParams)
59
+ var queryString = getParamsAsObject(availableParams)
44
60
  }
45
61
 
46
62
  return currentRequest = $.ajax(url, {
@@ -259,7 +275,7 @@ $(document).on('click', '.apply-area', function(e) {
259
275
  filterValueText.push($(checkedElements[i]).parent().text())
260
276
  }
261
277
 
262
- truncatedFilterValue = filterValueText[0]
278
+ var truncatedFilterValue = filterValueText[0]
263
279
  if (filterValue.length > 1) {
264
280
  truncatedFilterValue += ' + ' + (filterValue.length - 1) + ' more'
265
281
  }
@@ -286,7 +302,7 @@ $(document).on('click', '.filter-chip-remove', function(e) {
286
302
 
287
303
  var searchParams = window.location.search
288
304
  if (searchParams.length > 0) {
289
- queryString = getParamsAsObject(searchParams)
305
+ var queryString = getParamsAsObject(searchParams)
290
306
  if (queryString['filters'][filterType] != undefined) {
291
307
  delete(queryString['filters'][filterType][filterColumn])
292
308
  var queryParam = jQuery.param(queryString)
@@ -317,31 +333,4 @@ $(document).on('click', '[data-behaviour="selected-chip"]', function(e) {
317
333
  $(selectElement).parent().siblings(':first').addClass('search-area').removeClass('search-with-chips')
318
334
  $(selectElement).parent().siblings(':last').removeClass('active')
319
335
  }
320
- })
321
-
322
- CmFilter = {
323
- // Generate or remove elements of the dropdown based on the search value.
324
- dropdown_search: function(element) {
325
- var filter = element.val().toUpperCase();
326
- var dropdownElements = element.parents(':nth(1)').find('.list-area').children();
327
- for (var i = 0; i < dropdownElements.length; i++) {
328
- txtValue = $(dropdownElements[i]).children().text();
329
- if (txtValue.toUpperCase().indexOf(filter) > -1) {
330
- $(dropdownElements[i]).css('display', 'flex');
331
- } else {
332
- $(dropdownElements[i]).css('display', 'none');
333
- }
334
- }
335
- },
336
- quick_input_search: function(element) {
337
- var filter = element.val().toUpperCase();
338
- var searchElements = element.parents(':nth(3)').find('.list-area').children();
339
- searchElements.removeClass('visible').addClass('hidden')
340
- for (var i = 0; i < searchElements.length; i++) {
341
- txtValue = $(searchElements[i]).children().text();
342
- if (txtValue.toUpperCase().indexOf(filter) > -1) {
343
- $(searchElements[i]).removeClass('hidden').addClass('visible');
344
- }
345
- }
346
- }
347
- }
336
+ })
@@ -1,3 +1,17 @@
1
+ var CmFilter = {
2
+ quick_input_search: function(element) {
3
+ var filter = element.val().toUpperCase();
4
+ var searchElements = element.parents(':nth(3)').find('.list-area').children();
5
+ searchElements.removeClass('visible').addClass('hidden')
6
+ for (var i = 0; i < searchElements.length; i++) {
7
+ var txtValue = $(searchElements[i]).children().text();
8
+ if (txtValue.toUpperCase().indexOf(filter) > -1) {
9
+ $(searchElements[i]).removeClass('hidden').addClass('visible');
10
+ }
11
+ }
12
+ }
13
+ }
14
+
1
15
  $(document).on("keydown", function(e) {
2
16
  if (e.keyCode == 75 && e.metaKey) {
3
17
  $('#quickSearchModal').modal('show')
@@ -12,7 +26,7 @@ $(document).on('keydown', function(e){
12
26
  if(e.which === 40){
13
27
  if(liSelected){
14
28
  liSelected.removeClass('active-item');
15
- next = liSelected.next();
29
+ var next = liSelected.next();
16
30
  if(next.length > 0){
17
31
  liSelected = next.addClass('active-item');
18
32
  selected = next.text();
@@ -44,8 +58,7 @@ $(document).on('keydown', function(e){
44
58
  }
45
59
  }
46
60
  if(liSelected && e.which === 13) {
47
- console.log("Selected item id ", liSelected)
48
- href = liSelected.attr('href')
61
+ var href = liSelected.attr('href')
49
62
  window.location = href
50
63
  }
51
64
  }
@@ -0,0 +1,44 @@
1
+ import jQuery from 'jquery';
2
+ window.jQuery = jQuery // <- "select2" will check this
3
+ window.$ = jQuery
4
+
5
+ // This is a hack to fix 'process is not defined'
6
+ // Ref article: https://adambien.blog/roller/abien/entry/uncaught_referenceerror_process_is_not
7
+ // Based on this filter dropdown works.
8
+ window.process = {
9
+ env: {
10
+ NODE_ENV: 'development'
11
+ }
12
+ }
13
+
14
+ import 'moment'
15
+ import 'bootstrap'
16
+ import '@popperjs/core'
17
+ import 'flatpickr'
18
+ import 'jgrowl'
19
+ jqueryJgrowl()
20
+ import Select2 from "select2"
21
+ Select2()
22
+
23
+ // import '@nathanvda/cocoon'
24
+ import 'daterangepicker'
25
+ import '@fortawesome/fontawesome-free'
26
+ import jqueryJgrowl from 'jgrowl';
27
+
28
+
29
+ flatpickr("[data-behaviour='date-only']", {
30
+ dateFormat: "d-m-Y"
31
+ })
32
+ flatpickr("[data-behaviour='date-time']", {
33
+ enableTime: true
34
+ })
35
+ flatpickr("[data-behaviour='filter'][data-filter-type='date']", {
36
+ mode: 'range'
37
+ })
38
+ $('.select-2').select2();
39
+ $(document).on('turbolinks:load', function () {
40
+ $('.select-2').select2();
41
+ flatpickr("[data-behaviour='date-only']", {
42
+ dateFormat: "d-m-Y"
43
+ })
44
+ })
@@ -182,6 +182,18 @@ input.cm-checkbox[type="checkbox"] {
182
182
  }
183
183
 
184
184
  //Radio button styles
185
+ .cm-radio-section {
186
+ width: 100%;
187
+ float: left;
188
+ .cm-radio-label {
189
+ float: left;
190
+ padding-left: 10px;
191
+ }
192
+ .cm-radio-tag {
193
+ float: left;
194
+ }
195
+ }
196
+
185
197
  input.cm-radio[type="radio"] {
186
198
  position: relative;
187
199
  display: inline-block;
@@ -106,12 +106,14 @@ module CmAdmin
106
106
  data = @action.parent == "index" ? @ar_object.data : @ar_object
107
107
  format.html { render @action.partial }
108
108
  else
109
- ar_object = @action.code_block.call(@ar_object)
110
- if ar_object.errors.empty?
111
- redirect_url = @model.current_action.redirection_url || @action.redirection_url || request.referrer || "/cm_admin/#{@model.ar_model.table_name}/#{@ar_object.id}"
109
+ response_object = @action.code_block.call(@response_object)
110
+ if response_object.class == Hash
111
+ format.json { render json: response_object }
112
+ elsif response_object.errors.empty?
113
+ redirect_url = @model.current_action.redirection_url || @action.redirection_url || request.referrer || "/cm_admin/#{@model.ar_model.table_name}/#{@response_object.id}"
112
114
  format.html { redirect_to redirect_url, notice: "#{@action.name.titleize} is successful" }
113
115
  else
114
- error_messages = ar_object.errors.full_messages.map{|error_message| "<li>#{error_message}</li>"}.join
116
+ error_messages = response_object.errors.full_messages.map{|error_message| "<li>#{error_message}</li>"}.join
115
117
  format.html { redirect_to request.referrer, alert: "<b>#{@action.name.titleize} is unsuccessful</b><br /><ul>#{error_messages}</ul>" }
116
118
  end
117
119
  end
@@ -193,9 +195,11 @@ module CmAdmin
193
195
  end
194
196
 
195
197
  def resource_params(params)
196
- columns = @model.ar_model.column_names
198
+ columns = @model.ar_model.columns_hash.map {|key, ar_adapter|
199
+ ar_adapter.sql_type_metadata.sql_type.ends_with?('[]') ? Hash[ar_adapter.name, []] : ar_adapter.name.to_sym
200
+ }
197
201
  columns += @model.ar_model.stored_attributes.values.flatten
198
- permittable_fields = @model.additional_permitted_fields + columns.reject { |i| CmAdmin::REJECTABLE_FIELDS.include?(i) }.map(&:to_sym)
202
+ permittable_fields = @model.additional_permitted_fields + columns.reject { |i| CmAdmin::REJECTABLE_FIELDS.include?(i) }
199
203
  permittable_fields += @model.ar_model.name.constantize.reflect_on_all_associations.map {|x|
200
204
  next if x.options[:polymorphic]
201
205
  if x.class.name.include?('HasOne')
@@ -214,7 +218,6 @@ module CmAdmin
214
218
  }
215
219
  permittable_fields += nested_fields
216
220
  @model.ar_model.columns.map { |col| permittable_fields << col.name.split('_cents') if col.name.include?('_cents') }
217
-
218
221
  params.require(@model.name.underscore.to_sym).permit(*permittable_fields)
219
222
  end
220
223
 
@@ -1,8 +1,5 @@
1
- require "webpacker/helper"
2
-
3
1
  module CmAdmin
4
2
  module ApplicationHelper
5
- include ::Webpacker::Helper
6
3
 
7
4
  def current_webpacker_instance
8
5
  CmAdmin.webpacker
@@ -9,10 +9,10 @@ require('flatpickr')
9
9
  require("jgrowl")
10
10
  require("trix")
11
11
  require('./scaffolds.js')
12
- require('./form_validation.js')
13
- require('./quick_search.js')
14
- require('./filters.js')
15
- require('./exports.js')
12
+ require('/app/assets/javascripts/cm_admin/form_validation.js')
13
+ require('/app/assets/javascripts/cm_admin/quick_search.js')
14
+ require('/app/assets/javascripts/cm_admin/filters.js')
15
+ require('/app/assets/javascripts/cm_admin/exports.js')
16
16
 
17
17
  import jQuery from 'jquery'
18
18
  import LocalTime from "local-time"
@@ -75,6 +75,57 @@ $(document).on('click', '.drawer-close', function(e) {
75
75
  }, 300);
76
76
  });
77
77
 
78
+ $(document).on('change', '[data-field-type="linked-field"]', function(e) {
79
+ e.stopPropagation();
80
+ params = {}
81
+ params[$(this).data('field-name')] = $(this).val()
82
+ request_url = $(this).data('target-url') + '?' + $.param(params);
83
+ console.log(request_url)
84
+ $.ajax(request_url, {
85
+ type: 'GET',
86
+ success: function(data) {
87
+ apply_response_to_field(data)
88
+ },
89
+ error: function(jqxhr, textStatus, errorThrown) {
90
+ alert('Something went wrong. Please try again later.\n' + errorThrown);
91
+ }
92
+ });
93
+ });
94
+
95
+ function apply_response_to_field(response) {
96
+ $.each(response['fields'], function(key, value) {
97
+ switch(value['target_type']) {
98
+ case 'select':
99
+ update_options_in_select(value['target_value'])
100
+ break;
101
+ case 'input':
102
+ update_options_input_value(value['target_value'])
103
+ break;
104
+ case 'toggle_visibility':
105
+ toggle_field_visibility(value['target_value'])
106
+ }
107
+ })
108
+ }
109
+
110
+ function update_options_input_value(field_obj) {
111
+ input_tag = $('#' + field_obj['table'] + '_' + field_obj['field_name'])
112
+ input_tag.val(field_obj['field_value'])
113
+ }
114
+
115
+ function update_options_in_select(field_obj) {
116
+ select_tag = $('#' + field_obj['table'] + '_' + field_obj['field_name'])
117
+ select_tag.empty();
118
+ $.each(field_obj['field_value'], function(key, value) {
119
+ select_tag.append($("<option></option>")
120
+ .attr("value", value[1]).text(value[0]));
121
+ });
122
+ }
123
+
124
+ function toggle_field_visibility(field_obj) {
125
+ element = $('#' + field_obj['table'] + '_' + field_obj['field_name'])
126
+ element.closest('.input-wrapper').toggleClass('hidden')
127
+ }
128
+
78
129
  $(document).on('cocoon:after-insert', '.nested-field-wrapper', function(e) {
79
130
  e.stopPropagation();
80
131
  replaceAccordionTitle($(this))
@@ -7,12 +7,17 @@ html
7
7
  = csrf_meta_tags
8
8
  = csp_meta_tag
9
9
  = stylesheet_link_tag 'cm_admin/cm_admin', media: 'all', 'data-turbolinks-track': 'reload'
10
- = stylesheet_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
11
- link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" /
12
- = javascript_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
10
+ - if CmAdmin::VersionManager.use_webpacker?
11
+ = stylesheet_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
12
+ = javascript_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
13
+ script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"
14
+ - elsif CmAdmin::VersionManager.use_importmap?
15
+ = javascript_importmap_tags
16
+ = javascript_import_module_tag "cm_admin/application"
13
17
  = javascript_include_tag 'cm_admin/custom', 'data-turbolinks-track': 'reload'
14
18
  = stylesheet_link_tag 'cm_admin/custom', media: 'all', 'data-turbolinks-track': 'reload'
15
- script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"
19
+ link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" /
20
+
16
21
  script src="https://raw.githack.com/SortableJS/Sortable/master/Sortable.js"
17
22
  body
18
23
  .cm-admin
@@ -7,8 +7,9 @@ html
7
7
  = csrf_meta_tags
8
8
  = csp_meta_tag
9
9
  = stylesheet_link_tag 'cm_admin/cm_admin', media: 'all', 'data-turbolinks-track': 'reload'
10
- = stylesheet_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
11
- = javascript_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
10
+ - if CmAdmin::VersionManager.rails6?
11
+ = stylesheet_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
12
+ = javascript_pack_tag 'cm_admin/application', 'data-turbolinks-track': 'reload'
12
13
  body
13
14
  - flash.each do |type, msg|
14
15
  .alert class="alert-#{type}"