zuora_connect_ui 0.10.1 → 0.11.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/zuora_connect_ui.js +8 -24
  3. data/app/assets/javascripts/zuora_connect_ui/app.js.erb +4 -18
  4. data/app/assets/javascripts/zuora_connect_ui/bundle/connect-ui.min.js +28 -0
  5. data/app/assets/javascripts/zuora_connect_ui/bundle/connect-ui.min.js.map +1 -0
  6. data/app/assets/javascripts/zuora_connect_ui/globals.js +24 -0
  7. data/app/assets/javascripts/zuora_connect_ui/noty.js +0 -21
  8. data/app/assets/stylesheets/zuora_connect_ui/buttons.scss +37 -12
  9. data/app/assets/stylesheets/zuora_connect_ui/datatables.scss +4 -0
  10. data/app/helpers/zuora_connect_ui/application_helper.rb +12 -5
  11. data/app/views/partials/_table.html.erb +3 -3
  12. data/lib/peek/views/connect.rb +2 -0
  13. data/lib/zuora_connect_ui.rb +2 -0
  14. data/lib/zuora_connect_ui/serializer.rb +77 -13
  15. data/lib/zuora_connect_ui/serializer/relationship.rb +62 -0
  16. data/lib/zuora_connect_ui/version.rb +1 -1
  17. metadata +95 -34
  18. data/app/assets/javascripts/zuora_connect_ui/datatable.js +0 -344
  19. data/app/assets/javascripts/zuora_connect_ui/fetch.js +0 -42
  20. data/app/assets/javascripts/zuora_connect_ui/iframe.js +0 -49
  21. data/app/assets/javascripts/zuora_connect_ui/input.js +0 -10
  22. data/app/assets/javascripts/zuora_connect_ui/tabs.js +0 -4
  23. data/app/assets/javascripts/zuora_connect_ui/util.js +0 -51
  24. data/vendor/assets/bootstrap-datepicker/js/bootstrap-datepicker.min.js +0 -8
  25. data/vendor/assets/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js +0 -1
  26. data/vendor/assets/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js +0 -1
  27. data/vendor/assets/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js +0 -1
  28. data/vendor/assets/html5sortable/js/html5sortable.min.js +0 -1
  29. data/vendor/assets/idb-keyval/js/idb-keyval-iife.js +0 -100
  30. data/vendor/assets/noty/js/noty.min.js +0 -16
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ZuoraConnectUi
4
+ class Serializer
5
+ # The configuration for a relationship between models
6
+ class Relationship
7
+ # key may be plural, record_type will always be singular
8
+ attr_reader :key, :relationship_type, :id_method_name,
9
+ :record_type, :plural_type
10
+
11
+ def initialize(key:, relationship_type:)
12
+ @key = key
13
+ @relationship_type = relationship_type
14
+
15
+ set_id_method_name
16
+ end
17
+
18
+ def serialize(resources, fields)
19
+ resources.each_with_object({}) do |resource, hash|
20
+ relations = resource.public_send(key)
21
+ relations = [relations] unless @relationship_type == :has_many
22
+
23
+ relations.each do |relation|
24
+ next if hash.key? relation.id.to_s.to_sym
25
+
26
+ hash[relation.id.to_s.to_sym] = record_hash(relation, fields)
27
+ end
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def record_hash(resource, fields)
34
+ hash = { id: resource.id }
35
+
36
+ fields.each do |field|
37
+ hash[key_transform(field)] = resource.public_send(field)
38
+ end
39
+
40
+ hash
41
+ end
42
+
43
+ def set_id_method_name
44
+ if @relationship_type == :has_many
45
+ singular_key = @key.to_s.singularize
46
+ id_postfix = '_ids'
47
+ else
48
+ singular_key = @key
49
+ id_postfix = '_id'
50
+ end
51
+
52
+ @record_type = singular_key.to_sym
53
+ @plural_type = singular_key.pluralize.to_sym
54
+ @id_method_name = "#{singular_key}#{id_postfix}".to_sym
55
+ end
56
+
57
+ def key_transform(input)
58
+ input.to_s.camelize(:lower).to_sym
59
+ end
60
+ end
61
+ end
62
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ZuoraConnectUi
4
- VERSION = '0.10.1'
4
+ VERSION = '0.11.2'
5
5
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zuora_connect_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.11.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Connect Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-14 00:00:00.000000000 Z
11
+ date: 2020-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bootstrap-sass
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -25,7 +39,7 @@ dependencies:
25
39
  - !ruby/object:Gem::Version
26
40
  version: 3.4.1
27
41
  - !ruby/object:Gem::Dependency
28
- name: select2-rails
42
+ name: jquery-datatables-rails
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
@@ -39,7 +53,21 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: jquery-datatables-rails
56
+ name: oj
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.8'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: peek
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - ">="
@@ -53,7 +81,7 @@ dependencies:
53
81
  - !ruby/object:Gem::Version
54
82
  version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
- name: peek
84
+ name: select2-rails
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - ">="
@@ -67,19 +95,19 @@ dependencies:
67
95
  - !ruby/object:Gem::Version
68
96
  version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
- name: oj
98
+ name: brakeman
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
- - - "~>"
101
+ - - ">="
74
102
  - !ruby/object:Gem::Version
75
- version: '3.8'
76
- type: :runtime
103
+ version: '0'
104
+ type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
- - - "~>"
108
+ - - ">="
81
109
  - !ruby/object:Gem::Version
82
- version: '3.8'
110
+ version: '0'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: bundler
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -95,35 +123,35 @@ dependencies:
95
123
  - !ruby/object:Gem::Version
96
124
  version: '1.16'
97
125
  - !ruby/object:Gem::Dependency
98
- name: rake
126
+ name: rspec
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: '10.0'
131
+ version: '3.0'
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: '10.0'
138
+ version: '3.0'
111
139
  - !ruby/object:Gem::Dependency
112
- name: rspec
140
+ name: rspec_junit_formatter
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
- - - "~>"
143
+ - - ">="
116
144
  - !ruby/object:Gem::Version
117
- version: '3.0'
145
+ version: '0'
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
- - - "~>"
150
+ - - ">="
123
151
  - !ruby/object:Gem::Version
124
- version: '3.0'
152
+ version: '0'
125
153
  - !ruby/object:Gem::Dependency
126
- name: brakeman
154
+ name: rubocop
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - ">="
@@ -137,7 +165,49 @@ dependencies:
137
165
  - !ruby/object:Gem::Version
138
166
  version: '0'
139
167
  - !ruby/object:Gem::Dependency
140
- name: rubocop
168
+ name: rubocop-performance
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rubocop-rspec
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: simplecov
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: simplecov-cobertura
141
211
  requirement: !ruby/object:Gem::Requirement
142
212
  requirements:
143
213
  - - ">="
@@ -161,14 +231,11 @@ files:
161
231
  - README.md
162
232
  - app/assets/javascripts/zuora_connect_ui.js
163
233
  - app/assets/javascripts/zuora_connect_ui/app.js.erb
164
- - app/assets/javascripts/zuora_connect_ui/datatable.js
165
- - app/assets/javascripts/zuora_connect_ui/fetch.js
166
- - app/assets/javascripts/zuora_connect_ui/iframe.js
234
+ - app/assets/javascripts/zuora_connect_ui/bundle/connect-ui.min.js
235
+ - app/assets/javascripts/zuora_connect_ui/bundle/connect-ui.min.js.map
236
+ - app/assets/javascripts/zuora_connect_ui/globals.js
167
237
  - app/assets/javascripts/zuora_connect_ui/imports/no-jquery-ui.js
168
- - app/assets/javascripts/zuora_connect_ui/input.js
169
238
  - app/assets/javascripts/zuora_connect_ui/noty.js
170
- - app/assets/javascripts/zuora_connect_ui/tabs.js
171
- - app/assets/javascripts/zuora_connect_ui/util.js
172
239
  - app/assets/stylesheets/_zuora_connect_ui.scss
173
240
  - app/assets/stylesheets/zuora_connect_ui/anjuna.scss
174
241
  - app/assets/stylesheets/zuora_connect_ui/base.scss
@@ -194,14 +261,11 @@ files:
194
261
  - lib/peek/views/connect.rb
195
262
  - lib/zuora_connect_ui.rb
196
263
  - lib/zuora_connect_ui/serializer.rb
264
+ - lib/zuora_connect_ui/serializer/relationship.rb
197
265
  - lib/zuora_connect_ui/version.rb
198
266
  - vendor/assets/anjuna/css/anjuna-icons.css
199
267
  - vendor/assets/awesome-bootstrap-checkbox/css/awesome-bootstrap-checkbox.scss
200
268
  - vendor/assets/bootstrap-datepicker/css/bootstrap-datepicker3.min.css
201
- - vendor/assets/bootstrap-datepicker/js/bootstrap-datepicker.min.js
202
- - vendor/assets/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js
203
- - vendor/assets/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js
204
- - vendor/assets/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js
205
269
  - vendor/assets/contextMenu/css/jquery.contextMenu.min.scss
206
270
  - vendor/assets/contextMenu/fonts/context-menu-icons.eot
207
271
  - vendor/assets/contextMenu/fonts/context-menu-icons.ttf
@@ -210,7 +274,6 @@ files:
210
274
  - vendor/assets/contextMenu/js/jquery.contextMenu.min.js
211
275
  - vendor/assets/contextMenu/js/jquery.contextMenu.min.js.map.js
212
276
  - vendor/assets/contextMenu/js/jquery.ui.position.min.js
213
- - vendor/assets/html5sortable/js/html5sortable.min.js
214
277
  - vendor/assets/icons/css/icons.scss
215
278
  - vendor/assets/icons/img/FontAwesome.otf
216
279
  - vendor/assets/icons/img/fontawesome-webfont.eot
@@ -243,10 +306,8 @@ files:
243
306
  - vendor/assets/icons/img/zuora.svg
244
307
  - vendor/assets/icons/img/zuora.ttf
245
308
  - vendor/assets/icons/img/zuora.woff
246
- - vendor/assets/idb-keyval/js/idb-keyval-iife.js
247
309
  - vendor/assets/noty/css/bootstrap-v4.css
248
310
  - vendor/assets/noty/css/noty.css
249
- - vendor/assets/noty/js/noty.min.js
250
311
  homepage:
251
312
  licenses:
252
313
  - MIT
@@ -1,344 +0,0 @@
1
- // Datatables in tabs that aren't initially shown need columns resized on show
2
- $(document).on("shown.bs.tab", 'a[data-toggle="tab"]', function(e) {
3
- $(this.getAttribute("href"))
4
- .find("table.dataTable")
5
- .each(function() {
6
- $(this)
7
- .dataTable()
8
- .fnAdjustColumnSizing();
9
- });
10
- });
11
-
12
- const zStorage = (function() {
13
- const stores = {};
14
- let warning = false;
15
-
16
- function logWarning(error) {
17
- if (warning) return;
18
- console.warn("Table State cannot be saved in Safari");
19
- warning = true;
20
- }
21
-
22
- return {
23
- set(key, value, table) {
24
- if (!stores.hasOwnProperty(table)) {
25
- stores[table] = new idbKeyval.Store(APP_NAME, table + "_table");
26
- }
27
- return idbKeyval.set(key, value, stores[table]).catch(logWarning);
28
- },
29
-
30
- get(key, table) {
31
- if (!stores.hasOwnProperty(table)) {
32
- stores[table] = new idbKeyval.Store(APP_NAME, table + "_table");
33
- }
34
- return idbKeyval.get(key, stores[table]).catch(logWarning);
35
- }
36
- };
37
- })();
38
-
39
- const DEBUG = false;
40
-
41
- function getTableParams(tableName, settings, callback) {
42
- const [cacheFilters, paramFilters] = settings.filters.reduce(
43
- ([c, p], cur) => (cur.cache ? [[cur, ...c], p] : [c, [cur, ...p]]),
44
- [[], []]
45
- );
46
-
47
- Promise.all(
48
- [
49
- zStorage.get("view", tableName),
50
- zStorage.get("size", tableName),
51
- zStorage.get("sort", tableName),
52
- zStorage.get("fields", tableName)
53
- ].concat(cacheFilters.map(f => zStorage.get(f.name + "_filter", tableName)))
54
- ).then(v => {
55
- const [view, size, sort, fields, ...savedFilters] = v;
56
-
57
- cacheFilters.forEach((f, i) => setupFilter(tableName, f, savedFilters[i]));
58
- paramFilters.forEach(f => setupFilter(tableName, f, undefined));
59
-
60
- const visibleColumns = (fields || []).reduce(
61
- (acc, cur) => (cur.vis ? acc.concat(cur.col) : acc),
62
- []
63
- );
64
-
65
- const columns =
66
- fields === undefined
67
- ? settings.columns
68
- : settings.columns
69
- .map(c => {
70
- const index = fields.findIndex(f => f.col === c.data);
71
- return {
72
- ...c,
73
- visible: visibleColumns.includes(c.data),
74
- sortIndex: index === -1 ? 9999 : index
75
- };
76
- })
77
- .sort((a, b) => a.sortIndex - b.sortIndex);
78
-
79
- callback(
80
- columns,
81
- view || settings.view,
82
- size || settings.size,
83
- (sort || settings.sort).map(([col, dir]) => {
84
- const newCol = settings.columns.findIndex(c => c.data === col);
85
- return [newCol > -1 ? newCol : 1, dir];
86
- })
87
- );
88
- });
89
- }
90
-
91
- function setupFilter(tableName, filter, cached) {
92
- switch (filter.type) {
93
- case "checkbox":
94
- return (cached === undefined ? filter.defaults : cached).forEach(v =>
95
- $(`#zc_${tableName}_${filter.name} input[value="${v}"]`).prop(
96
- "checked",
97
- true
98
- )
99
- );
100
- case "select":
101
- case "group-select":
102
- return $(`#${tableName}_content select[name="${filter.name}"]`)
103
- .val(cached === undefined ? filter.defaults : cached)
104
- .trigger("change");
105
- // Is boolean used by any apps?
106
- case "boolean":
107
- return $(`#${tableName}_content input[name="${filter.name}"]`).prop(
108
- "checked",
109
- cached === undefined ? filter.defaults : cached
110
- );
111
- }
112
- }
113
-
114
- function initTable(api, tableName, settings, columns, tableFilters) {
115
- initViewMode(api, tableName, settings.view);
116
- initTableSize(api, tableName, settings.size);
117
- initSortEvent(api, tableName);
118
- initSearch(api, tableName);
119
- initTableSelection(api, tableName);
120
- initColumnEvents(api, tableName, columns);
121
- initTableFilters(api, tableName, tableFilters);
122
-
123
- $(`#${tableName}_refresh`).on("click", function(e) {
124
- if (
125
- $(`#${tableName}_content`).is(":visible") &&
126
- !$(this).hasClass("zc-spin")
127
- ) {
128
- api.draw(false);
129
- }
130
- });
131
- }
132
-
133
- function initViewMode(api, tableName, mode) {
134
- $(`#${tableName}_view_${mode}`).addClass("active");
135
-
136
- const viewModeSelectors = `#${tableName}_view_table, #${tableName}_view_grid`;
137
- $(viewModeSelectors).on("click", () => {
138
- if ($(this).hasClass("active")) return;
139
-
140
- $(viewModeSelectors).toggleClass("active");
141
- zStorage.set("view", $(this).data("mode"), tableName);
142
- api
143
- .draw(false)
144
- .rows()
145
- .deselect();
146
- });
147
- }
148
-
149
- function getTableViewMode(tableName, fallback) {
150
- if ($(`#${tableName}_view_table`).hasClass("active")) return "table";
151
- else if ($(`#${tableName}_view_grid`).hasClass("active")) return "grid";
152
- else return fallback;
153
- }
154
-
155
- function initTableSize(api, tableName, size) {
156
- $("<select>", { id: "table_size", name: "table_size" }) // TODO: Not sure if this needs to be named
157
- .appendTo(`#${tableName}_select_container`)
158
- .append([10, 25, 50, 100].map(v => `<option value="${v}">${v}</option>`))
159
- .val(size)
160
- .select2({
161
- theme: "default",
162
- minimumResultsForSearch: Infinity
163
- })
164
- .on("change", function(e) {
165
- api.page.len(+$(this).val()).draw(false);
166
- zStorage.set("size", +$(this).val(), tableName);
167
- });
168
- }
169
-
170
- function initSortEvent(api, tableName) {
171
- api.on("order.dt", function(e) {
172
- zStorage.set(
173
- "sort",
174
- api.order().map(([col, dir]) => [api.column(col).dataSrc(), dir]),
175
- tableName
176
- );
177
- });
178
- }
179
-
180
- function initSearch(api, tableName) {
181
- $(`#${tableName}_search_btn`).on("click", () => {
182
- $(`#${tableName}_search_wrapper`).toggleClass("active");
183
- $(`#${tableName}_search`).focus();
184
- });
185
-
186
- let timer;
187
- $(`#${tableName}_search`).on("input", function(e) {
188
- clearTimeout(timer);
189
- timer = setTimeout(function() {
190
- api.draw();
191
- }, 700);
192
- });
193
-
194
- $(`#${tableName}_search`).keydown(function(e) {
195
- if (e.keyCode == 13) {
196
- e.preventDefault();
197
- return false;
198
- }
199
- });
200
- }
201
-
202
- function initTableSelection(api, tableName) {
203
- $(`#${tableName}_select_all`).on("click", function(e) {
204
- $(this)
205
- .find("span")
206
- .hasClass("z-icon-addition")
207
- ? api.rows().select()
208
- : api.rows().deselect();
209
- });
210
-
211
- api.on("select.dt deselect.dt", function(e, dt, type, indexes) {
212
- const count = dt.rows({ selected: true }).count();
213
- $(`#${tableName}_group_actions`).toggleClass("hidden", count == 0);
214
- $(`#${tableName}_select_all span`)
215
- .toggleClass("z-icon-addition", count !== dt.rows().count())
216
- .toggleClass("z-icon-subtraction", count === dt.rows().count());
217
- if (DEBUG) {
218
- console.log(e.type === "select" ? "Selected" : "Deselected");
219
- console.log(dt.rows(indexes).data());
220
- }
221
- });
222
- }
223
-
224
- function initColumnEvents(api, tableName, columns) {
225
- let dropdownReorder = false;
226
-
227
- $(`#${tableName}_visibility_menu`).html(
228
- columns.map((c, i) =>
229
- $("<li>", { "data-key": c.data, class: "checkbox-row" }).append(
230
- $("<div>", { class: "checkbox checkbox-primary" }).append(
231
- $("<input>", {
232
- type: "checkbox",
233
- name: `${tableName}[table_column_vis][]`,
234
- checked: !Object.keys(c).includes("visible") || c.visible,
235
- value: i
236
- }).on("change", function() {
237
- const index = api.colReorder.transpose(+$(this).val(), "toCurrent");
238
- api.column(index).visible($(this).is(":checked"));
239
- resize_iframe();
240
- saveColumns();
241
- }),
242
- $("<label>").html(
243
- (c.class || "").includes("actions") ? "Actions" : c.title
244
- )
245
- ),
246
- $('<span class="icon z-icon-hamburger"></span>')
247
- )
248
- )
249
- );
250
-
251
- sortable(`#${tableName}_visibility_menu`, {
252
- placeholder: '<li class="checkbox-row">&nbsp;</li>'
253
- })[0].addEventListener("sortupdate", () => {
254
- if (DEBUG) console.log(`Sort Stop Trigger ${tableName}`);
255
- dropdownReorder = true;
256
-
257
- api.colReorder.order(
258
- $(`#${tableName}_visibility_menu li input`)
259
- .get()
260
- .map(v => api.colReorder.transpose(+$(v).val(), "toCurrent"))
261
- );
262
- });
263
-
264
- api.on("column-reorder", function(e, settings, details) {
265
- if (DEBUG) console.log(`Ordering Trigger ${tableName}`, details);
266
- saveColumns();
267
-
268
- if (dropdownReorder) return (dropdownReorder = false);
269
- if (DEBUG) console.log(`Ordering Trigger Rebuild DropDown ${tableName}`);
270
-
271
- const orderedItems = api
272
- .columns()
273
- .dataSrc()
274
- .toArray()
275
- .map(v => $(`#${tableName}_visibility_menu li[data-key="${v}"]`));
276
- $(`#${tableName}_visibility_menu`).html(orderedItems);
277
- });
278
-
279
- function saveColumns() {
280
- if (DEBUG) console.log(`Save Fields ${tableName}`);
281
-
282
- const fields = api
283
- .columns()
284
- .indexes()
285
- .toArray()
286
- .map(i => ({
287
- col: api.column(i).dataSrc(),
288
- vis: api.column(i).visible()
289
- }));
290
-
291
- zStorage.set("fields", fields, tableName);
292
- }
293
- }
294
-
295
- function initTableFilters(api, tableName, tableFilters) {
296
- tableFilters.forEach(filter => {
297
- const cache = filter.hasOwnProperty("cache") && filter.cache;
298
-
299
- switch (filter.type) {
300
- case "checkbox":
301
- return checkboxFilter(api, cache, filter);
302
- case "select":
303
- case "group-select":
304
- return selectFilter(api, cache, filter);
305
- case "boolean":
306
- return booleanFilter(api, cache, filter);
307
- }
308
- });
309
-
310
- function checkboxFilter(api, cache, filter) {
311
- const checkboxDebounceDraw = debounce(() => {
312
- const f = $(
313
- `#zc_${tableName}_${filter.name} input[name="${filter.name}[]"]:checked`
314
- )
315
- .map((_, el) => $(el).val())
316
- .get();
317
- if (cache) zStorage.set(filter.name + "_filter", f, tableName);
318
- api.draw();
319
- }, 750);
320
-
321
- $(`#zc_${tableName}_${filter.name} input[name="${filter.name}[]"]`).on(
322
- "click",
323
- checkboxDebounceDraw
324
- );
325
- }
326
-
327
- function selectFilter(api, cache, filter) {
328
- $(`#${tableName}_content select[name="${filter.name}"]`).change(function() {
329
- const f = $(this).val();
330
- if (cache) zStorage.set(filter.name + "_filter", f, tableName);
331
- api.draw();
332
- });
333
- }
334
-
335
- function booleanFilter(api, cache, filter) {
336
- $(`#${tableName}_content input[name="${filter.name}"]`).change(function() {
337
- const f = $(
338
- `#${tableName}_content input[name="${filter.name}"]:checked`
339
- ).val();
340
- if (cache) zStorage.set(filter.name + "_filter", f, tableName);
341
- api.draw();
342
- });
343
- }
344
- }