ember-headless-table 1.1.0 → 1.3.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 (98) hide show
  1. package/LICENSE.md +9 -0
  2. package/dist/-private/-type-tests/plugin-properties.test.js +4 -8
  3. package/dist/-private/-type-tests/plugin-properties.test.js.map +1 -1
  4. package/dist/-private/-type-tests/plugin-with.test.js.map +1 -1
  5. package/dist/-private/-type-tests/plugins-accessors.test.js +12 -11
  6. package/dist/-private/-type-tests/plugins-accessors.test.js.map +1 -1
  7. package/dist/-private/-type-tests/plugins-signature-from.test.js +7 -6
  8. package/dist/-private/-type-tests/plugins-signature-from.test.js.map +1 -1
  9. package/dist/-private/-type-tests/plugins-signature-utils.test.js.map +1 -1
  10. package/dist/-private/-type-tests/table-api.test.js +3 -2
  11. package/dist/-private/-type-tests/table-api.test.js.map +1 -1
  12. package/dist/-private/-type-tests/table-config.test.js +9 -11
  13. package/dist/-private/-type-tests/table-config.test.js.map +1 -1
  14. package/dist/-private/column.d.ts +1 -1
  15. package/dist/-private/column.js +7 -15
  16. package/dist/-private/column.js.map +1 -1
  17. package/dist/-private/js-helper.d.ts +1 -1
  18. package/dist/-private/js-helper.js +2 -3
  19. package/dist/-private/js-helper.js.map +1 -1
  20. package/dist/-private/preferences.js +7 -39
  21. package/dist/-private/preferences.js.map +1 -1
  22. package/dist/-private/row.d.ts +1 -1
  23. package/dist/-private/row.js +4 -15
  24. package/dist/-private/row.js.map +1 -1
  25. package/dist/-private/table.js +4 -4
  26. package/dist/-private/utils.js +0 -2
  27. package/dist/-private/utils.js.map +1 -1
  28. package/dist/{applyDecoratedDescriptor-e0489e2f.js → applyDecoratedDescriptor-6b986a67.js} +1 -6
  29. package/dist/applyDecoratedDescriptor-6b986a67.js.map +1 -0
  30. package/dist/{classPrivateFieldGet-af59a8ea.js → classPrivateFieldGet-b4d7d334.js} +1 -3
  31. package/dist/{classPrivateFieldGet-af59a8ea.js.map → classPrivateFieldGet-b4d7d334.js.map} +1 -1
  32. package/dist/{defineProperty-a0196711.js → defineProperty-35ce617b.js} +1 -2
  33. package/dist/defineProperty-35ce617b.js.map +1 -0
  34. package/dist/index.d.ts +1 -1
  35. package/dist/plugins/-private/base.d.ts +1 -1
  36. package/dist/plugins/-private/base.js +18 -59
  37. package/dist/plugins/-private/base.js.map +1 -1
  38. package/dist/plugins/-private/utils.js +5 -20
  39. package/dist/plugins/-private/utils.js.map +1 -1
  40. package/dist/plugins/column-reordering/helpers.d.ts +9 -4
  41. package/dist/plugins/column-reordering/helpers.js +13 -6
  42. package/dist/plugins/column-reordering/helpers.js.map +1 -1
  43. package/dist/plugins/column-reordering/index.js +1 -1
  44. package/dist/plugins/column-reordering/plugin.d.ts +57 -11
  45. package/dist/plugins/column-reordering/plugin.js +109 -130
  46. package/dist/plugins/column-reordering/plugin.js.map +1 -1
  47. package/dist/plugins/column-reordering/utils.js +0 -7
  48. package/dist/plugins/column-reordering/utils.js.map +1 -1
  49. package/dist/plugins/column-resizing/handle.js +4 -33
  50. package/dist/plugins/column-resizing/handle.js.map +1 -1
  51. package/dist/plugins/column-resizing/helpers.js +2 -2
  52. package/dist/plugins/column-resizing/helpers.js.map +1 -1
  53. package/dist/plugins/column-resizing/plugin.js +15 -64
  54. package/dist/plugins/column-resizing/plugin.js.map +1 -1
  55. package/dist/plugins/column-resizing/resize-observer.js +1 -3
  56. package/dist/plugins/column-resizing/resize-observer.js.map +1 -1
  57. package/dist/plugins/column-resizing/utils.js +0 -2
  58. package/dist/plugins/column-resizing/utils.js.map +1 -1
  59. package/dist/plugins/column-visibility/helpers.js +3 -3
  60. package/dist/plugins/column-visibility/helpers.js.map +1 -1
  61. package/dist/plugins/column-visibility/plugin.js +6 -26
  62. package/dist/plugins/column-visibility/plugin.js.map +1 -1
  63. package/dist/plugins/data-sorting/helpers.js +7 -7
  64. package/dist/plugins/data-sorting/helpers.js.map +1 -1
  65. package/dist/plugins/data-sorting/plugin.js +2 -32
  66. package/dist/plugins/data-sorting/plugin.js.map +1 -1
  67. package/dist/plugins/data-sorting/types.js +0 -3
  68. package/dist/plugins/data-sorting/types.js.map +1 -1
  69. package/dist/plugins/metadata/helpers.d.ts +4 -0
  70. package/dist/plugins/metadata/helpers.js +12 -0
  71. package/dist/plugins/metadata/helpers.js.map +1 -0
  72. package/dist/plugins/metadata/index.d.ts +3 -0
  73. package/dist/plugins/metadata/index.js +3 -0
  74. package/dist/plugins/metadata/index.js.map +1 -0
  75. package/dist/plugins/metadata/plugin.d.ts +24 -0
  76. package/dist/plugins/metadata/plugin.js +25 -0
  77. package/dist/plugins/metadata/plugin.js.map +1 -0
  78. package/dist/plugins/row-selection/helpers.js.map +1 -1
  79. package/dist/plugins/row-selection/plugin.js +5 -42
  80. package/dist/plugins/row-selection/plugin.js.map +1 -1
  81. package/dist/plugins/sticky-columns/helpers.d.ts +14 -1
  82. package/dist/plugins/sticky-columns/helpers.js +40 -1
  83. package/dist/plugins/sticky-columns/helpers.js.map +1 -1
  84. package/dist/plugins/sticky-columns/index.js +1 -1
  85. package/dist/plugins/sticky-columns/plugin.d.ts +17 -1
  86. package/dist/plugins/sticky-columns/plugin.js +41 -43
  87. package/dist/plugins/sticky-columns/plugin.js.map +1 -1
  88. package/dist/{table-8e46554b.d.ts → table-0cbd2720.d.ts} +9 -7
  89. package/dist/{table-8e46554b.js → table-0cbd2720.js} +34 -36
  90. package/dist/table-0cbd2720.js.map +1 -0
  91. package/dist/test-support/index.js +2 -6
  92. package/dist/test-support/index.js.map +1 -1
  93. package/dist/utils.js +2 -5
  94. package/dist/utils.js.map +1 -1
  95. package/package.json +20 -33
  96. package/dist/applyDecoratedDescriptor-e0489e2f.js.map +0 -1
  97. package/dist/defineProperty-a0196711.js.map +0 -1
  98. package/dist/table-8e46554b.js.map +0 -1
@@ -1,7 +1,7 @@
1
- import { _ as _initializerDefineProperty } from '../../table-8e46554b.js';
2
- import { _ as _applyDecoratedDescriptor } from '../../applyDecoratedDescriptor-e0489e2f.js';
3
- import { a as _classPrivateFieldGet } from '../../classPrivateFieldGet-af59a8ea.js';
4
- import { _ as _defineProperty } from '../../defineProperty-a0196711.js';
1
+ import { _ as _initializerDefineProperty } from '../../table-0cbd2720.js';
2
+ import { _ as _applyDecoratedDescriptor } from '../../applyDecoratedDescriptor-6b986a67.js';
3
+ import { a as _classPrivateFieldGet } from '../../classPrivateFieldGet-b4d7d334.js';
4
+ import { _ as _defineProperty } from '../../defineProperty-35ce617b.js';
5
5
  import { macroCondition, dependencySatisfies, importSync } from '@embroider/macros';
6
6
  import { tracked } from '@glimmer/tracking';
7
7
  import { assert } from '@ember/debug';
@@ -10,92 +10,77 @@ import { TrackedMap } from 'tracked-built-ins';
10
10
  import { BasePlugin, meta, preferences, columns } from '../-private/base.js';
11
11
 
12
12
  var _class, _descriptor, _class3;
13
-
14
13
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
15
-
16
14
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
17
15
  let cached = macroCondition(dependencySatisfies('ember-source', '>= 4.1.0-alpha.0')) ? importSync('@glimmer/tracking').cached : importSync('ember-cached-decorator-polyfill').cached;
18
16
  class ColumnReordering extends BasePlugin {
19
17
  constructor(...args) {
20
18
  super(...args);
21
-
22
19
  _defineProperty(this, "name", 'column-reordering');
23
-
24
20
  _defineProperty(this, "meta", {
25
21
  column: ColumnMeta,
26
22
  table: TableMeta
27
23
  });
28
24
  }
29
-
30
25
  reset() {
31
26
  let tableMeta = meta.forTable(this.table, ColumnReordering);
32
27
  tableMeta.reset();
33
28
  }
34
-
35
29
  get columns() {
36
30
  return meta.forTable(this.table, ColumnReordering).columns;
37
31
  }
38
-
39
32
  }
40
-
41
33
  _defineProperty(ColumnReordering, "features", ['columnOrder']);
42
-
43
34
  var _tableMeta = /*#__PURE__*/new WeakMap();
44
-
45
35
  class ColumnMeta {
46
36
  constructor(column) {
47
37
  _classPrivateFieldInitSpec(this, _tableMeta, {
48
38
  get: _get_tableMeta,
49
39
  set: void 0
50
40
  });
51
-
52
- _defineProperty(this, "moveLeft", () => this.position--);
53
-
54
- _defineProperty(this, "moveRight", () => this.position++);
55
-
41
+ _defineProperty(this, "moveLeft", () => {
42
+ _classPrivateFieldGet(this, _tableMeta).columnOrder.moveLeft(this.column.key);
43
+ });
44
+ _defineProperty(this, "moveRight", () => {
45
+ _classPrivateFieldGet(this, _tableMeta).columnOrder.moveRight(this.column.key);
46
+ });
56
47
  this.column = column;
57
48
  }
58
-
59
49
  get position() {
60
50
  return _classPrivateFieldGet(this, _tableMeta).getPosition(this.column);
61
51
  }
62
-
63
52
  set position(value) {
64
53
  _classPrivateFieldGet(this, _tableMeta).setPosition(this.column, value);
65
54
  }
66
-
67
55
  get canMoveLeft() {
68
56
  return _classPrivateFieldGet(this, _tableMeta).getPosition(this.column) !== 0;
69
57
  }
70
-
71
58
  get canMoveRight() {
72
59
  return _classPrivateFieldGet(this, _tableMeta).getPosition(this.column) !== _classPrivateFieldGet(this, _tableMeta).columns.length - 1;
73
60
  }
74
-
75
61
  get cannotMoveLeft() {
76
62
  return !this.canMoveLeft;
77
63
  }
78
-
79
64
  get cannotMoveRight() {
80
65
  return !this.canMoveRight;
81
66
  }
67
+
82
68
  /**
83
69
  * Move the column one spot to the left
84
70
  */
85
-
86
-
87
71
  }
88
-
89
72
  function _get_tableMeta() {
90
73
  return meta.forTable(this.column.table, ColumnReordering);
91
74
  }
92
-
93
75
  let TableMeta = (_class = class TableMeta {
94
76
  constructor(table) {
95
77
  _initializerDefineProperty(this, "columnOrder", _descriptor, this);
96
-
78
+ _defineProperty(this, "setOrder", order => {
79
+ this.columnOrder.setAll(order.map);
80
+ });
97
81
  this.table = table;
98
82
  }
83
+
99
84
  /**
100
85
  * @private
101
86
  *
@@ -105,20 +90,28 @@ let TableMeta = (_class = class TableMeta {
105
90
  * This is also why the order of the columns is maintained via column key
106
91
  */
107
92
 
108
-
93
+ /**
94
+ * Get the curret order/position of a column
95
+ */
109
96
  getPosition(column) {
110
97
  return this.columnOrder.get(column.key);
111
98
  }
112
99
 
100
+ /**
101
+ * Swap the column with the column at `newPosition`
102
+ */
113
103
  setPosition(column, newPosition) {
114
- return this.columnOrder.set(column.key, newPosition);
104
+ return this.columnOrder.swapWith(column.key, newPosition);
115
105
  }
106
+
107
+ /**
108
+ * Using a `ColumnOrder` instance, set the order of all columns
109
+ */
110
+
116
111
  /**
117
112
  * Revert to default config, delete preferences,
118
113
  * and clear the columnOrder
119
114
  */
120
-
121
-
122
115
  reset() {
123
116
  preferences.forTable(this.table, ColumnReordering).delete('order');
124
117
  this.columnOrder = new ColumnOrder({
@@ -126,44 +119,37 @@ let TableMeta = (_class = class TableMeta {
126
119
  save: this.save
127
120
  });
128
121
  }
122
+
129
123
  /**
130
124
  * @private
131
125
  */
132
-
133
-
134
126
  save(map) {
135
127
  let order = {};
136
-
137
128
  for (let [key, position] of map.entries()) {
138
129
  order[key] = position;
139
130
  }
140
-
141
131
  preferences.forTable(this.table, ColumnReordering).set('order', order);
142
132
  }
133
+
143
134
  /**
144
135
  * @private
145
136
  */
146
-
147
-
148
137
  read() {
149
138
  let order = preferences.forTable(this.table, ColumnReordering).get('order');
150
139
  if (!order) return;
151
140
  return new Map(Object.entries(order));
152
141
  }
153
-
154
142
  get columns() {
155
143
  return this.columnOrder.orderedColumns;
156
144
  }
145
+
157
146
  /**
158
147
  * @private
159
148
  * This isn't our data to expose, but it is useful to alias
160
149
  */
161
-
162
-
163
150
  get availableColumns() {
164
151
  return columns.for(this.table, ColumnReordering);
165
152
  }
166
-
167
153
  }, (_descriptor = _applyDecoratedDescriptor(_class.prototype, "columnOrder", [tracked], {
168
154
  configurable: true,
169
155
  enumerable: true,
@@ -176,143 +162,146 @@ let TableMeta = (_class = class TableMeta {
176
162
  });
177
163
  }
178
164
  }), _applyDecoratedDescriptor(_class.prototype, "getPosition", [action], Object.getOwnPropertyDescriptor(_class.prototype, "getPosition"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "setPosition", [action], Object.getOwnPropertyDescriptor(_class.prototype, "setPosition"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "reset", [action], Object.getOwnPropertyDescriptor(_class.prototype, "reset"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "save", [action], Object.getOwnPropertyDescriptor(_class.prototype, "save"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "read", [action], Object.getOwnPropertyDescriptor(_class.prototype, "read"), _class.prototype)), _class);
165
+
179
166
  /**
180
167
  * @private
181
168
  * Used for keeping track of and updating column order
182
169
  */
183
-
184
170
  let ColumnOrder = (_class3 = class ColumnOrder {
185
171
  /**
186
172
  * This map will be empty until we re-order something.
187
173
  */
174
+
188
175
  constructor(args) {
189
176
  _defineProperty(this, "map", new TrackedMap());
190
-
177
+ _defineProperty(this, "setAll", map => {
178
+ this.map.clear();
179
+ for (let [key, value] of map.entries()) {
180
+ this.map.set(key, value);
181
+ }
182
+ });
191
183
  this.args = args;
192
-
193
184
  if (args.existingOrder) {
194
185
  this.map = new TrackedMap(args.existingOrder);
195
186
  }
196
187
  }
197
188
 
198
- set(key, position) {
199
- /**
200
- * Cannot set a position lower than the min value (before the beginning?)
201
- */
202
- if (position < 0) {
203
- return false;
189
+ /**
190
+ * To account for columnVisibilty, we need to:
191
+ * - get the list of visible columns
192
+ * - get the column order (which preserves the order of hidden columns)
193
+ * - skip over non-visible columns when determining the previous "index"
194
+ * - set the position to whatever that is.
195
+ */
196
+ moveLeft(key) {
197
+ let orderedColumns = this.orderedColumns;
198
+ let found = false;
199
+ let nextColumn;
200
+ for (let column of orderedColumns.reverse()) {
201
+ if (found) {
202
+ nextColumn = column;
203
+ break;
204
+ }
205
+ if (column.key === key) {
206
+ found = true;
207
+ }
204
208
  }
205
- /**
206
- * position is 0-indexed and length includes 0 in its count of items
207
- */
209
+ if (!nextColumn) return;
210
+ let nextPosition = this.get(nextColumn.key);
211
+ this.swapWith(key, nextPosition);
212
+ }
213
+ /**
214
+ * To account for columnVisibilty, we need to:
215
+ * - get the list of visible columns
216
+ * - get the column order (which preserves the order of hidden columns)
217
+ * - skip over non-visible columns when determining the next "index"
218
+ * - set the position to whatever that is.
219
+ */
220
+ moveRight(key) {
221
+ let orderedColumns = this.orderedColumns;
222
+ let found = false;
223
+ let nextColumn;
224
+ for (let column of orderedColumns) {
225
+ if (found) {
226
+ nextColumn = column;
227
+ break;
228
+ }
229
+ if (column.key === key) {
230
+ found = true;
231
+ }
232
+ }
233
+ if (!nextColumn) return;
234
+ let nextPosition = this.get(nextColumn.key);
235
+ this.swapWith(key, nextPosition);
236
+ }
208
237
 
238
+ /**
239
+ * Performs a swap of the column's position with the column at position
240
+ */
241
+ swapWith(key, position) {
242
+ let validPositions = [...this.orderedMap.values()];
209
243
 
210
- let maxPosition = this.args.columns().length - 1;
211
244
  /**
212
- * Cannot set a position higher than the max value (after the end?)
245
+ * Position to swap to must exist
213
246
  */
214
-
215
- if (position > maxPosition) {
216
- return false;
247
+ if (!validPositions.includes(position)) {
248
+ return;
217
249
  }
250
+
218
251
  /**
219
252
  * Where did this column `key` come from? we can find out
220
253
  * by reading orderedMap
221
254
  */
222
-
223
-
224
255
  let currentPosition = this.orderedMap.get(key);
225
256
  assert(`Pre-existing position for ${key} could not be found. Does the column exist? ` + `The current positions are: ` + [...this.orderedMap.entries()].map(entry => entry.join(' => ')).join(', ') + ` and the availableColumns are: ` + this.args.columns().map(column => column.key) + ` and current "map" (${this.map.size}) is: ` + [...this.map.entries()].map(entry => entry.join(' => ')).join(', '), undefined !== currentPosition);
257
+
226
258
  /**
227
259
  * No need to change anything if the position is the same
228
260
  * This helps reduce @tracked invalidations, which in turn reduces DOM thrashing.
229
261
  */
230
-
231
262
  if (currentPosition === position) {
232
263
  return false;
233
264
  }
234
- /**
235
- * For the columns between the gap we took `key` from and the `position`
236
- * we want to place that column, which direction do we move those middle columns?
237
- */
238
-
239
-
240
- let direction = currentPosition < position ?
241
- /**
242
- * moved ------------------> to the right
243
- * currentPosition position
244
- * gap ^
245
- * columns left of position now need to shift left to fill that gap
246
- */
247
- 'left' :
248
- /**
249
- * moved <------------------ to the left
250
- * position currentPosition
251
- * gap ^
252
- * columns right of position now need to shift right to fill that gap
253
- */
254
- 'right';
255
265
  let keyByPosition = new Map([...this.orderedMap.entries()].map(entry => entry.reverse()));
256
-
257
266
  for (let [existingPosition, key] of keyByPosition.entries()) {
258
- if (direction === 'left') {
259
- if (existingPosition > currentPosition && existingPosition <= position) {
260
- this.map.set(key, existingPosition - 1);
261
- }
262
- }
263
-
264
- if (direction === 'right') {
265
- if (existingPosition >= position && existingPosition <= currentPosition) {
266
- this.map.set(key, existingPosition + 1);
267
- }
267
+ if (existingPosition === position) {
268
+ /**
269
+ * We swap positions because the positions are not incremental
270
+ * meaning we can have gaps, intentionally, due to hidden columns
271
+ */
272
+ this.map.set(key, currentPosition);
273
+ break;
268
274
  }
269
275
  }
276
+
270
277
  /**
271
278
  * Finally, set the position for the requested column
272
279
  */
273
-
274
-
275
280
  this.map.set(key, position);
281
+
276
282
  /**
277
283
  * Now that we've set the value for one column,
278
284
  * we need to make sure that all columns have a recorded position.
279
285
  */
280
-
281
286
  for (let [key, position] of this.orderedMap.entries()) {
282
287
  if (this.map.has(key)) continue;
283
288
  this.map.set(key, position);
284
289
  }
285
-
286
- this.args.save(this.map);
290
+ this.args.save?.(this.map);
287
291
  }
288
-
289
292
  get(key) {
290
293
  let result = this.orderedMap.get(key);
291
- assert(`No position found for ${key}. Is the column used within this table?`,
292
- /* 0 is falsey, but it's a valid value for position */
294
+ assert(`No position found for ${key}. Is the column used within this table?`, /* 0 is falsey, but it's a valid value for position */
293
295
  undefined !== result);
294
296
  return result;
295
297
  }
298
+
296
299
  /**
297
300
  * The same as this.map, but with all the columns' information
298
301
  */
299
-
300
-
301
302
  get orderedMap() {
302
303
  return orderOf(this.args.columns(), this.map);
303
304
  }
304
- /**
305
- * When columns are removed or hidden, our positions don't change
306
- * but when doing the math, we want to adjust things based on 0-indexed counting
307
- *
308
- * TODO: figure out if we need this??
309
- */
310
-
311
-
312
- get adjustedColumns() {
313
- return [];
314
- }
315
-
316
305
  get orderedColumns() {
317
306
  let availableColumns = this.args.columns();
318
307
  let availableByKey = availableColumns.reduce((keyMap, column) => {
@@ -323,37 +312,33 @@ let ColumnOrder = (_class3 = class ColumnOrder {
323
312
  let result = Array.from({
324
313
  length: availableColumns.length
325
314
  });
326
-
327
315
  for (let [key, position] of mergedOrder.entries()) {
328
316
  let column = availableByKey[key];
329
317
  assert(`Could not find column for pair: ${key} @ @{position}`, column);
330
318
  result[position] = column;
331
319
  }
332
-
333
320
  assert(`Generated orderedColumns' length (${result.filter(Boolean).length}) ` + `does not match the length of available columns (${availableColumns.length}). ` + `orderedColumns: ${result.filter(Boolean).map(c => c.key).join(', ')} -- ` + `available columns: ${availableColumns.map(c => c.key).join(', ')}`, result.filter(Boolean).length === availableColumns.length);
334
321
  return result.filter(Boolean);
335
322
  }
323
+ }, (_applyDecoratedDescriptor(_class3.prototype, "moveLeft", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "moveLeft"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "moveRight", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "moveRight"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "swapWith", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "swapWith"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "get", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "get"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "orderedMap", [cached], Object.getOwnPropertyDescriptor(_class3.prototype, "orderedMap"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "orderedColumns", [cached], Object.getOwnPropertyDescriptor(_class3.prototype, "orderedColumns"), _class3.prototype)), _class3);
336
324
 
337
- }, (_applyDecoratedDescriptor(_class3.prototype, "set", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "set"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "get", [action], Object.getOwnPropertyDescriptor(_class3.prototype, "get"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "orderedMap", [cached], Object.getOwnPropertyDescriptor(_class3.prototype, "orderedMap"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "adjustedColumns", [cached], Object.getOwnPropertyDescriptor(_class3.prototype, "adjustedColumns"), _class3.prototype), _applyDecoratedDescriptor(_class3.prototype, "orderedColumns", [cached], Object.getOwnPropertyDescriptor(_class3.prototype, "orderedColumns"), _class3.prototype)), _class3);
338
325
  /**
339
326
  * @private
340
327
  *
341
328
  * Utility for helping determine the percieved order of a set of columns
342
329
  * given the original (default) ordering, and then user-configurations
343
330
  */
344
-
345
331
  function orderOf(columns, currentOrder) {
346
332
  let result = new Map();
347
333
  let availableColumns = columns.map(column => column.key);
348
334
  let availableSet = new Set(availableColumns);
349
335
  let current = new Map([...currentOrder.entries()].map(([key, position]) => [position, key]));
336
+
350
337
  /**
351
338
  * O(n * log(n)) ?
352
339
  */
353
-
354
340
  for (let i = 0; i < Math.max(columns.length, current.size); i++) {
355
341
  let orderedKey = current.get(i);
356
-
357
342
  if (orderedKey) {
358
343
  /**
359
344
  * If the currentOrder specifies columns not presently available,
@@ -364,27 +349,21 @@ function orderOf(columns, currentOrder) {
364
349
  continue;
365
350
  }
366
351
  }
367
-
368
352
  let availableKey;
369
-
370
353
  while (availableKey = availableColumns.shift()) {
371
354
  if (result.has(availableKey) || currentOrder.has(availableKey)) {
372
355
  continue;
373
356
  }
374
-
375
357
  break;
376
358
  }
377
-
378
359
  if (!availableKey) {
379
360
  /**
380
361
  * The rest of our columns likely have their order set
381
362
  */
382
363
  continue;
383
364
  }
384
-
385
365
  result.set(availableKey, i);
386
366
  }
387
-
388
367
  return result;
389
368
  }
390
369
 
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-reordering/plugin.ts"],"sourcesContent":["import { cached, tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\nimport { TrackedMap } from 'tracked-built-ins';\n\nimport { preferences } from '[public-plugin-types]';\n\nimport { BasePlugin, columns, meta } from '../-private/base';\n\nimport type { PluginPreferences } from '[public-plugin-types]';\nimport type { Column, Table } from '[public-types]';\n\ninterface ColumnReorderingPreferences extends PluginPreferences {\n table: {\n order?: Record<string, number>;\n };\n}\n\ndeclare module 'ember-headless-table/plugins' {\n interface Registry {\n ColumnReordering?: ColumnReorderingPreferences;\n }\n}\n\nexport interface Signature {\n Meta: {\n Column: ColumnMeta;\n Table: TableMeta;\n };\n}\n\nexport class ColumnReordering extends BasePlugin<Signature> {\n name = 'column-reordering';\n static features = ['columnOrder'];\n\n meta = {\n column: ColumnMeta,\n table: TableMeta,\n } as const;\n\n reset() {\n let tableMeta = meta.forTable(this.table, ColumnReordering);\n\n tableMeta.reset();\n }\n\n get columns() {\n return meta.forTable(this.table, ColumnReordering).columns;\n }\n}\n\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n get #tableMeta() {\n return meta.forTable(this.column.table, ColumnReordering);\n }\n\n get position() {\n return this.#tableMeta.getPosition(this.column);\n }\n\n set position(value: number) {\n this.#tableMeta.setPosition(this.column, value);\n }\n\n get canMoveLeft() {\n return this.#tableMeta.getPosition(this.column) !== 0;\n }\n\n get canMoveRight() {\n return this.#tableMeta.getPosition(this.column) !== this.#tableMeta.columns.length - 1;\n }\n\n get cannotMoveLeft() {\n return !this.canMoveLeft;\n }\n\n get cannotMoveRight() {\n return !this.canMoveRight;\n }\n\n /**\n * Move the column one spot to the left\n */\n moveLeft = () => this.position--;\n\n /**\n * Move the column one spot to the right\n */\n moveRight = () => this.position++;\n}\n\nexport class TableMeta {\n constructor(private table: Table) {}\n\n /**\n * @private\n *\n * We want to maintain the instance of this ColumnOrder class because\n * we allow the consumer of the table to swap out columns at any time.\n * When they do this, we want to maintain the order of the table, best we can.\n * This is also why the order of the columns is maintained via column key\n */\n @tracked\n columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n existingOrder: this.read(),\n });\n\n @action\n getPosition(column: Column) {\n return this.columnOrder.get(column.key);\n }\n\n @action\n setPosition(column: Column, newPosition: number) {\n return this.columnOrder.set(column.key, newPosition);\n }\n\n /**\n * Revert to default config, delete preferences,\n * and clear the columnOrder\n */\n @action\n reset() {\n preferences.forTable(this.table, ColumnReordering).delete('order');\n this.columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n });\n }\n\n /**\n * @private\n */\n @action\n save(map: Map<string, number>) {\n let order: Record<string, number> = {};\n\n for (let [key, position] of map.entries()) {\n order[key] = position;\n }\n\n preferences.forTable(this.table, ColumnReordering).set('order', order);\n }\n\n /**\n * @private\n */\n @action\n private read() {\n let order = preferences.forTable(this.table, ColumnReordering).get('order');\n\n if (!order) return;\n\n return new Map<string, number>(Object.entries(order));\n }\n\n get columns() {\n return this.columnOrder.orderedColumns;\n }\n\n /**\n * @private\n * This isn't our data to expose, but it is useful to alias\n */\n private get availableColumns() {\n return columns.for(this.table, ColumnReordering);\n }\n}\n\n/**\n * @private\n * Used for keeping track of and updating column order\n */\nexport class ColumnOrder {\n /**\n * This map will be empty until we re-order something.\n */\n map = new TrackedMap<string, number>();\n\n constructor(\n private args: {\n columns: () => Column[];\n save: (order: Map<string, number>) => void;\n existingOrder?: Map<string, number>;\n }\n ) {\n if (args.existingOrder) {\n this.map = new TrackedMap(args.existingOrder);\n }\n }\n\n @action\n set(key: string, position: number) {\n /**\n * Cannot set a position lower than the min value (before the beginning?)\n */\n if (position < 0) {\n return false;\n }\n\n /**\n * position is 0-indexed and length includes 0 in its count of items\n */\n let maxPosition = this.args.columns().length - 1;\n\n /**\n * Cannot set a position higher than the max value (after the end?)\n */\n if (position > maxPosition) {\n return false;\n }\n\n /**\n * Where did this column `key` come from? we can find out\n * by reading orderedMap\n */\n let currentPosition = this.orderedMap.get(key);\n\n assert(\n `Pre-existing position for ${key} could not be found. Does the column exist? ` +\n `The current positions are: ` +\n [...this.orderedMap.entries()].map((entry) => entry.join(' => ')).join(', ') +\n ` and the availableColumns are: ` +\n this.args.columns().map((column) => column.key) +\n ` and current \"map\" (${this.map.size}) is: ` +\n [...this.map.entries()].map((entry) => entry.join(' => ')).join(', '),\n undefined !== currentPosition\n );\n\n /**\n * No need to change anything if the position is the same\n * This helps reduce @tracked invalidations, which in turn reduces DOM thrashing.\n */\n if (currentPosition === position) {\n return false;\n }\n\n /**\n * For the columns between the gap we took `key` from and the `position`\n * we want to place that column, which direction do we move those middle columns?\n */\n let direction =\n currentPosition < position\n ? /**\n * moved ------------------> to the right\n * currentPosition position\n * gap ^\n * columns left of position now need to shift left to fill that gap\n */\n 'left'\n : /**\n * moved <------------------ to the left\n * position currentPosition\n * gap ^\n * columns right of position now need to shift right to fill that gap\n */\n 'right';\n\n let keyByPosition = new Map<number, string>(\n [...this.orderedMap.entries()].map((entry) => entry.reverse() as [number, string])\n );\n\n for (let [existingPosition, key] of keyByPosition.entries()) {\n if (direction === 'left') {\n if (existingPosition > currentPosition && existingPosition <= position) {\n this.map.set(key, existingPosition - 1);\n }\n }\n\n if (direction === 'right') {\n if (existingPosition >= position && existingPosition <= currentPosition) {\n this.map.set(key, existingPosition + 1);\n }\n }\n }\n\n /**\n * Finally, set the position for the requested column\n */\n this.map.set(key, position);\n\n /**\n * Now that we've set the value for one column,\n * we need to make sure that all columns have a recorded position.\n */\n for (let [key, position] of this.orderedMap.entries()) {\n if (this.map.has(key)) continue;\n\n this.map.set(key, position);\n }\n\n this.args.save(this.map);\n }\n\n @action\n get(key: string) {\n let result = this.orderedMap.get(key);\n\n assert(\n `No position found for ${key}. Is the column used within this table?`,\n /* 0 is falsey, but it's a valid value for position */\n undefined !== result\n );\n\n return result;\n }\n\n /**\n * The same as this.map, but with all the columns' information\n */\n @cached\n get orderedMap(): ReadonlyMap<string, number> {\n return orderOf(this.args.columns(), this.map);\n }\n\n /**\n * When columns are removed or hidden, our positions don't change\n * but when doing the math, we want to adjust things based on 0-indexed counting\n *\n * TODO: figure out if we need this??\n */\n @cached\n get adjustedColumns(): Column[] {\n return [];\n }\n\n @cached\n get orderedColumns(): Column[] {\n let availableColumns = this.args.columns();\n let availableByKey = availableColumns.reduce((keyMap, column) => {\n keyMap[column.key] = column;\n\n return keyMap;\n }, {} as Record<string, Column>);\n let mergedOrder = orderOf(availableColumns, this.map);\n\n let result: Column[] = Array.from({ length: availableColumns.length });\n\n for (let [key, position] of mergedOrder.entries()) {\n let column = availableByKey[key];\n\n assert(`Could not find column for pair: ${key} @ @{position}`, column);\n result[position] = column;\n }\n\n assert(\n `Generated orderedColumns' length (${result.filter(Boolean).length}) ` +\n `does not match the length of available columns (${availableColumns.length}). ` +\n `orderedColumns: ${result\n .filter(Boolean)\n .map((c) => c.key)\n .join(', ')} -- ` +\n `available columns: ${availableColumns.map((c) => c.key).join(', ')}`,\n result.filter(Boolean).length === availableColumns.length\n );\n\n return result.filter(Boolean);\n }\n}\n\n/**\n * @private\n *\n * Utility for helping determine the percieved order of a set of columns\n * given the original (default) ordering, and then user-configurations\n */\nexport function orderOf(\n columns: { key: string }[],\n currentOrder: Map<string, number>\n): Map<string, number> {\n let result = new Map<string, number>();\n let availableColumns = columns.map((column) => column.key);\n let availableSet = new Set(availableColumns);\n let current = new Map<number, string>(\n [...currentOrder.entries()].map(([key, position]) => [position, key])\n );\n\n /**\n * O(n * log(n)) ?\n */\n for (let i = 0; i < Math.max(columns.length, current.size); i++) {\n let orderedKey = current.get(i);\n\n if (orderedKey) {\n /**\n * If the currentOrder specifies columns not presently available,\n * ignore them\n */\n if (availableSet.has(orderedKey)) {\n result.set(orderedKey, i);\n continue;\n }\n }\n\n let availableKey: string | undefined;\n\n while ((availableKey = availableColumns.shift())) {\n if (result.has(availableKey) || currentOrder.has(availableKey)) {\n continue;\n }\n\n break;\n }\n\n if (!availableKey) {\n /**\n * The rest of our columns likely have their order set\n */\n continue;\n }\n\n result.set(availableKey, i);\n }\n\n return result;\n}\n"],"names":["ColumnReordering","BasePlugin","column","ColumnMeta","table","TableMeta","reset","tableMeta","meta","forTable","columns","constructor","position","getPosition","value","setPosition","canMoveLeft","canMoveRight","length","cannotMoveLeft","cannotMoveRight","columnOrder","get","key","newPosition","set","preferences","delete","ColumnOrder","availableColumns","save","map","order","entries","read","Map","Object","orderedColumns","for","tracked","existingOrder","action","args","TrackedMap","maxPosition","currentPosition","orderedMap","assert","entry","join","size","undefined","direction","keyByPosition","reverse","existingPosition","has","result","orderOf","adjustedColumns","availableByKey","reduce","keyMap","mergedOrder","Array","from","filter","Boolean","c","cached","currentOrder","availableSet","Set","current","i","Math","max","orderedKey","availableKey","shift"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../src/plugins/column-reordering/plugin.ts"],"sourcesContent":["import { cached, tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\n\nimport { TrackedMap } from 'tracked-built-ins';\n\nimport { preferences } from '[public-plugin-types]';\n\nimport { BasePlugin, columns, meta } from '../-private/base';\n\nimport type { PluginPreferences } from '[public-plugin-types]';\nimport type { Column, Table } from '[public-types]';\n\ninterface ColumnReorderingPreferences extends PluginPreferences {\n table: {\n order?: Record<string, number>;\n };\n}\n\ndeclare module 'ember-headless-table/plugins' {\n interface Registry {\n ColumnReordering?: ColumnReorderingPreferences;\n }\n}\n\nexport interface Signature {\n Meta: {\n Column: ColumnMeta;\n Table: TableMeta;\n };\n}\n\nexport class ColumnReordering extends BasePlugin<Signature> {\n name = 'column-reordering';\n static features = ['columnOrder'];\n\n meta = {\n column: ColumnMeta,\n table: TableMeta,\n } as const;\n\n reset() {\n let tableMeta = meta.forTable(this.table, ColumnReordering);\n\n tableMeta.reset();\n }\n\n get columns() {\n return meta.forTable(this.table, ColumnReordering).columns;\n }\n}\n\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n get #tableMeta() {\n return meta.forTable(this.column.table, ColumnReordering);\n }\n\n get position() {\n return this.#tableMeta.getPosition(this.column);\n }\n\n set position(value: number) {\n this.#tableMeta.setPosition(this.column, value);\n }\n\n get canMoveLeft() {\n return this.#tableMeta.getPosition(this.column) !== 0;\n }\n\n get canMoveRight() {\n return this.#tableMeta.getPosition(this.column) !== this.#tableMeta.columns.length - 1;\n }\n\n get cannotMoveLeft() {\n return !this.canMoveLeft;\n }\n\n get cannotMoveRight() {\n return !this.canMoveRight;\n }\n\n /**\n * Move the column one spot to the left\n */\n moveLeft = () => {\n this.#tableMeta.columnOrder.moveLeft(this.column.key);\n };\n\n /**\n * Move the column one spot to the right\n */\n moveRight = () => {\n this.#tableMeta.columnOrder.moveRight(this.column.key);\n };\n}\n\nexport class TableMeta {\n constructor(private table: Table) {}\n\n /**\n * @private\n *\n * We want to maintain the instance of this ColumnOrder class because\n * we allow the consumer of the table to swap out columns at any time.\n * When they do this, we want to maintain the order of the table, best we can.\n * This is also why the order of the columns is maintained via column key\n */\n @tracked\n columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n existingOrder: this.read(),\n });\n\n /**\n * Get the curret order/position of a column\n */\n @action\n getPosition(column: Column) {\n return this.columnOrder.get(column.key);\n }\n\n /**\n * Swap the column with the column at `newPosition`\n */\n @action\n setPosition(column: Column, newPosition: number) {\n return this.columnOrder.swapWith(column.key, newPosition);\n }\n\n /**\n * Using a `ColumnOrder` instance, set the order of all columns\n */\n setOrder = (order: ColumnOrder) => {\n this.columnOrder.setAll(order.map);\n };\n\n /**\n * Revert to default config, delete preferences,\n * and clear the columnOrder\n */\n @action\n reset() {\n preferences.forTable(this.table, ColumnReordering).delete('order');\n this.columnOrder = new ColumnOrder({\n columns: () => this.availableColumns,\n save: this.save,\n });\n }\n\n /**\n * @private\n */\n @action\n save(map: Map<string, number>) {\n let order: Record<string, number> = {};\n\n for (let [key, position] of map.entries()) {\n order[key] = position;\n }\n\n preferences.forTable(this.table, ColumnReordering).set('order', order);\n }\n\n /**\n * @private\n */\n @action\n private read() {\n let order = preferences.forTable(this.table, ColumnReordering).get('order');\n\n if (!order) return;\n\n return new Map<string, number>(Object.entries(order));\n }\n\n get columns() {\n return this.columnOrder.orderedColumns;\n }\n\n /**\n * @private\n * This isn't our data to expose, but it is useful to alias\n */\n private get availableColumns() {\n return columns.for(this.table, ColumnReordering);\n }\n}\n\n/**\n * @private\n * Used for keeping track of and updating column order\n */\nexport class ColumnOrder {\n /**\n * This map will be empty until we re-order something.\n */\n map = new TrackedMap<string, number>();\n\n constructor(\n private args: {\n columns: () => Column[];\n save?: (order: Map<string, number>) => void;\n existingOrder?: Map<string, number>;\n }\n ) {\n if (args.existingOrder) {\n this.map = new TrackedMap(args.existingOrder);\n }\n }\n\n /**\n * To account for columnVisibilty, we need to:\n * - get the list of visible columns\n * - get the column order (which preserves the order of hidden columns)\n * - skip over non-visible columns when determining the previous \"index\"\n * - set the position to whatever that is.\n */\n @action\n moveLeft(key: string) {\n let orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (let column of orderedColumns.reverse()) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n let nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n setAll = (map: Map<string, number>) => {\n this.map.clear();\n\n for (let [key, value] of map.entries()) {\n this.map.set(key, value);\n }\n };\n\n /**\n * To account for columnVisibilty, we need to:\n * - get the list of visible columns\n * - get the column order (which preserves the order of hidden columns)\n * - skip over non-visible columns when determining the next \"index\"\n * - set the position to whatever that is.\n */\n @action\n moveRight(key: string) {\n let orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (let column of orderedColumns) {\n if (found) {\n nextColumn = column;\n\n break;\n }\n\n if (column.key === key) {\n found = true;\n }\n }\n\n if (!nextColumn) return;\n\n let nextPosition = this.get(nextColumn.key);\n\n this.swapWith(key, nextPosition);\n }\n\n /**\n * Performs a swap of the column's position with the column at position\n */\n @action\n swapWith(key: string, position: number) {\n let validPositions = [...this.orderedMap.values()];\n\n /**\n * Position to swap to must exist\n */\n if (!validPositions.includes(position)) {\n return;\n }\n\n /**\n * Where did this column `key` come from? we can find out\n * by reading orderedMap\n */\n let currentPosition = this.orderedMap.get(key);\n\n assert(\n `Pre-existing position for ${key} could not be found. Does the column exist? ` +\n `The current positions are: ` +\n [...this.orderedMap.entries()].map((entry) => entry.join(' => ')).join(', ') +\n ` and the availableColumns are: ` +\n this.args.columns().map((column) => column.key) +\n ` and current \"map\" (${this.map.size}) is: ` +\n [...this.map.entries()].map((entry) => entry.join(' => ')).join(', '),\n undefined !== currentPosition\n );\n\n /**\n * No need to change anything if the position is the same\n * This helps reduce @tracked invalidations, which in turn reduces DOM thrashing.\n */\n if (currentPosition === position) {\n return false;\n }\n\n let keyByPosition = new Map<number, string>(\n [...this.orderedMap.entries()].map((entry) => entry.reverse() as [number, string])\n );\n\n for (let [existingPosition, key] of keyByPosition.entries()) {\n if (existingPosition === position) {\n /**\n * We swap positions because the positions are not incremental\n * meaning we can have gaps, intentionally, due to hidden columns\n */\n this.map.set(key, currentPosition);\n\n break;\n }\n }\n\n /**\n * Finally, set the position for the requested column\n */\n this.map.set(key, position);\n\n /**\n * Now that we've set the value for one column,\n * we need to make sure that all columns have a recorded position.\n */\n for (let [key, position] of this.orderedMap.entries()) {\n if (this.map.has(key)) continue;\n\n this.map.set(key, position);\n }\n\n this.args.save?.(this.map);\n }\n\n @action\n get(key: string) {\n let result = this.orderedMap.get(key);\n\n assert(\n `No position found for ${key}. Is the column used within this table?`,\n /* 0 is falsey, but it's a valid value for position */\n undefined !== result\n );\n\n return result;\n }\n\n /**\n * The same as this.map, but with all the columns' information\n */\n @cached\n get orderedMap(): ReadonlyMap<string, number> {\n return orderOf(this.args.columns(), this.map);\n }\n\n @cached\n get orderedColumns(): Column[] {\n let availableColumns = this.args.columns();\n let availableByKey = availableColumns.reduce((keyMap, column) => {\n keyMap[column.key] = column;\n\n return keyMap;\n }, {} as Record<string, Column>);\n let mergedOrder = orderOf(availableColumns, this.map);\n\n let result: Column[] = Array.from({ length: availableColumns.length });\n\n for (let [key, position] of mergedOrder.entries()) {\n let column = availableByKey[key];\n\n assert(`Could not find column for pair: ${key} @ @{position}`, column);\n result[position] = column;\n }\n\n assert(\n `Generated orderedColumns' length (${result.filter(Boolean).length}) ` +\n `does not match the length of available columns (${availableColumns.length}). ` +\n `orderedColumns: ${result\n .filter(Boolean)\n .map((c) => c.key)\n .join(', ')} -- ` +\n `available columns: ${availableColumns.map((c) => c.key).join(', ')}`,\n result.filter(Boolean).length === availableColumns.length\n );\n\n return result.filter(Boolean);\n }\n}\n\n/**\n * @private\n *\n * Utility for helping determine the percieved order of a set of columns\n * given the original (default) ordering, and then user-configurations\n */\nexport function orderOf(\n columns: { key: string }[],\n currentOrder: Map<string, number>\n): Map<string, number> {\n let result = new Map<string, number>();\n let availableColumns = columns.map((column) => column.key);\n let availableSet = new Set(availableColumns);\n let current = new Map<number, string>(\n [...currentOrder.entries()].map(([key, position]) => [position, key])\n );\n\n /**\n * O(n * log(n)) ?\n */\n for (let i = 0; i < Math.max(columns.length, current.size); i++) {\n let orderedKey = current.get(i);\n\n if (orderedKey) {\n /**\n * If the currentOrder specifies columns not presently available,\n * ignore them\n */\n if (availableSet.has(orderedKey)) {\n result.set(orderedKey, i);\n continue;\n }\n }\n\n let availableKey: string | undefined;\n\n while ((availableKey = availableColumns.shift())) {\n if (result.has(availableKey) || currentOrder.has(availableKey)) {\n continue;\n }\n\n break;\n }\n\n if (!availableKey) {\n /**\n * The rest of our columns likely have their order set\n */\n continue;\n }\n\n result.set(availableKey, i);\n }\n\n return result;\n}\n"],"names":["ColumnReordering","BasePlugin","column","ColumnMeta","table","TableMeta","reset","tableMeta","meta","forTable","columns","constructor","columnOrder","moveLeft","key","moveRight","position","getPosition","value","setPosition","canMoveLeft","canMoveRight","length","cannotMoveLeft","cannotMoveRight","order","setAll","map","get","newPosition","swapWith","preferences","delete","ColumnOrder","availableColumns","save","entries","set","read","Map","Object","orderedColumns","for","tracked","existingOrder","action","args","TrackedMap","clear","found","nextColumn","reverse","nextPosition","validPositions","orderedMap","values","includes","currentPosition","assert","entry","join","size","undefined","keyByPosition","existingPosition","has","result","orderOf","availableByKey","reduce","keyMap","mergedOrder","Array","from","filter","Boolean","c","cached","currentOrder","availableSet","Set","current","i","Math","max","orderedKey","availableKey","shift"],"mappings":"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"}
@@ -5,34 +5,27 @@ function reorderColumns(columns, orderedColumns) {
5
5
  if (orderedColumns === undefined) {
6
6
  return columns;
7
7
  }
8
-
9
8
  let repositionedColumns = Array.from({
10
9
  length: columns.length
11
10
  });
12
-
13
11
  for (const column of columns) {
14
12
  const orderedColumn = orderedColumns.find(orderedColumn => column.key === orderedColumn.key);
15
13
  const currentMeta = meta.forColumn(column, ColumnReordering);
16
-
17
14
  if (orderedColumn === undefined) {
18
15
  if (currentMeta.position !== undefined && currentMeta.position >= 0) {
19
16
  repositionedColumns[currentMeta.position] = column;
20
17
  }
21
-
22
18
  continue;
23
19
  }
24
-
25
20
  const {
26
21
  position
27
22
  } = orderedColumn;
28
-
29
23
  if (position !== undefined && !repositionedColumns[position]) {
30
24
  repositionedColumns[position] = column;
31
25
  } else {
32
26
  repositionedColumns.push(column);
33
27
  }
34
28
  }
35
-
36
29
  repositionedColumns = repositionedColumns.filter(column => column !== undefined);
37
30
  return repositionedColumns;
38
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../src/plugins/column-reordering/utils.ts"],"sourcesContent":["import { meta } from '../-private/base';\nimport { ColumnReordering } from './plugin';\n\nimport type { Column } from '[public-types]';\n\ntype ColumnOrder = { key: string; position: number | undefined }[];\n\nexport function reorderColumns(columns: Column[], orderedColumns: ColumnOrder | undefined) {\n if (orderedColumns === undefined) {\n return columns;\n }\n\n let repositionedColumns: Column[] = Array.from({\n length: columns.length,\n });\n\n for (const column of columns) {\n const orderedColumn = orderedColumns.find((orderedColumn) => column.key === orderedColumn.key);\n const currentMeta = meta.forColumn(column, ColumnReordering);\n\n if (orderedColumn === undefined) {\n if (currentMeta.position !== undefined && currentMeta.position >= 0) {\n repositionedColumns[currentMeta.position] = column;\n }\n\n continue;\n }\n\n const { position } = orderedColumn;\n\n if (position !== undefined && !repositionedColumns[position]) {\n repositionedColumns[position] = column;\n } else {\n repositionedColumns.push(column);\n }\n }\n\n repositionedColumns = repositionedColumns.filter((column) => column !== undefined);\n\n return repositionedColumns;\n}\n"],"names":["reorderColumns","columns","orderedColumns","undefined","repositionedColumns","Array","from","length","column","orderedColumn","find","key","currentMeta","meta","forColumn","ColumnReordering","position","push","filter"],"mappings":";;;AAOO,SAASA,cAAT,CAAwBC,OAAxB,EAA2CC,cAA3C,EAAoF;EACzF,IAAIA,cAAc,KAAKC,SAAvB,EAAkC;AAChC,IAAA,OAAOF,OAAP,CAAA;AACD,GAAA;;AAED,EAAA,IAAIG,mBAA6B,GAAGC,KAAK,CAACC,IAAN,CAAW;IAC7CC,MAAM,EAAEN,OAAO,CAACM,MAAAA;AAD6B,GAAX,CAApC,CAAA;;AAIA,EAAA,KAAK,MAAMC,MAAX,IAAqBP,OAArB,EAA8B;AAC5B,IAAA,MAAMQ,aAAa,GAAGP,cAAc,CAACQ,IAAf,CAAqBD,aAAD,IAAmBD,MAAM,CAACG,GAAP,KAAeF,aAAa,CAACE,GAApE,CAAtB,CAAA;IACA,MAAMC,WAAW,GAAGC,IAAI,CAACC,SAAL,CAAeN,MAAf,EAAuBO,gBAAvB,CAApB,CAAA;;IAEA,IAAIN,aAAa,KAAKN,SAAtB,EAAiC;MAC/B,IAAIS,WAAW,CAACI,QAAZ,KAAyBb,SAAzB,IAAsCS,WAAW,CAACI,QAAZ,IAAwB,CAAlE,EAAqE;AACnEZ,QAAAA,mBAAmB,CAACQ,WAAW,CAACI,QAAb,CAAnB,GAA4CR,MAA5C,CAAA;AACD,OAAA;;AAED,MAAA,SAAA;AACD,KAAA;;IAED,MAAM;AAAEQ,MAAAA,QAAAA;AAAF,KAAA,GAAeP,aAArB,CAAA;;IAEA,IAAIO,QAAQ,KAAKb,SAAb,IAA0B,CAACC,mBAAmB,CAACY,QAAD,CAAlD,EAA8D;AAC5DZ,MAAAA,mBAAmB,CAACY,QAAD,CAAnB,GAAgCR,MAAhC,CAAA;AACD,KAFD,MAEO;MACLJ,mBAAmB,CAACa,IAApB,CAAyBT,MAAzB,CAAA,CAAA;AACD,KAAA;AACF,GAAA;;EAEDJ,mBAAmB,GAAGA,mBAAmB,CAACc,MAApB,CAA4BV,MAAD,IAAYA,MAAM,KAAKL,SAAlD,CAAtB,CAAA;AAEA,EAAA,OAAOC,mBAAP,CAAA;AACD;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../src/plugins/column-reordering/utils.ts"],"sourcesContent":["import { meta } from '../-private/base';\nimport { ColumnReordering } from './plugin';\n\nimport type { Column } from '[public-types]';\n\ntype ColumnOrder = { key: string; position: number | undefined }[];\n\nexport function reorderColumns(columns: Column[], orderedColumns: ColumnOrder | undefined) {\n if (orderedColumns === undefined) {\n return columns;\n }\n\n let repositionedColumns: Column[] = Array.from({\n length: columns.length,\n });\n\n for (const column of columns) {\n const orderedColumn = orderedColumns.find((orderedColumn) => column.key === orderedColumn.key);\n const currentMeta = meta.forColumn(column, ColumnReordering);\n\n if (orderedColumn === undefined) {\n if (currentMeta.position !== undefined && currentMeta.position >= 0) {\n repositionedColumns[currentMeta.position] = column;\n }\n\n continue;\n }\n\n const { position } = orderedColumn;\n\n if (position !== undefined && !repositionedColumns[position]) {\n repositionedColumns[position] = column;\n } else {\n repositionedColumns.push(column);\n }\n }\n\n repositionedColumns = repositionedColumns.filter((column) => column !== undefined);\n\n return repositionedColumns;\n}\n"],"names":["reorderColumns","columns","orderedColumns","undefined","repositionedColumns","Array","from","length","column","orderedColumn","find","key","currentMeta","meta","forColumn","ColumnReordering","position","push","filter"],"mappings":";;;AAOO,SAASA,cAAc,CAACC,OAAiB,EAAEC,cAAuC,EAAE;EACzF,IAAIA,cAAc,KAAKC,SAAS,EAAE;AAChC,IAAA,OAAOF,OAAO,CAAA;AAChB,GAAA;AAEA,EAAA,IAAIG,mBAA6B,GAAGC,KAAK,CAACC,IAAI,CAAC;IAC7CC,MAAM,EAAEN,OAAO,CAACM,MAAAA;AAClB,GAAC,CAAC,CAAA;AAEF,EAAA,KAAK,MAAMC,MAAM,IAAIP,OAAO,EAAE;AAC5B,IAAA,MAAMQ,aAAa,GAAGP,cAAc,CAACQ,IAAI,CAAED,aAAa,IAAKD,MAAM,CAACG,GAAG,KAAKF,aAAa,CAACE,GAAG,CAAC,CAAA;IAC9F,MAAMC,WAAW,GAAGC,IAAI,CAACC,SAAS,CAACN,MAAM,EAAEO,gBAAgB,CAAC,CAAA;IAE5D,IAAIN,aAAa,KAAKN,SAAS,EAAE;MAC/B,IAAIS,WAAW,CAACI,QAAQ,KAAKb,SAAS,IAAIS,WAAW,CAACI,QAAQ,IAAI,CAAC,EAAE;AACnEZ,QAAAA,mBAAmB,CAACQ,WAAW,CAACI,QAAQ,CAAC,GAAGR,MAAM,CAAA;AACpD,OAAA;AAEA,MAAA,SAAA;AACF,KAAA;IAEA,MAAM;AAAEQ,MAAAA,QAAAA;AAAS,KAAC,GAAGP,aAAa,CAAA;IAElC,IAAIO,QAAQ,KAAKb,SAAS,IAAI,CAACC,mBAAmB,CAACY,QAAQ,CAAC,EAAE;AAC5DZ,MAAAA,mBAAmB,CAACY,QAAQ,CAAC,GAAGR,MAAM,CAAA;AACxC,KAAC,MAAM;AACLJ,MAAAA,mBAAmB,CAACa,IAAI,CAACT,MAAM,CAAC,CAAA;AAClC,KAAA;AACF,GAAA;EAEAJ,mBAAmB,GAAGA,mBAAmB,CAACc,MAAM,CAAEV,MAAM,IAAKA,MAAM,KAAKL,SAAS,CAAC,CAAA;AAElF,EAAA,OAAOC,mBAAmB,CAAA;AAC5B;;;;"}