cm-admin 0.9.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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}"