ember-headless-table 1.1.0 → 1.2.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.
- package/LICENSE.md +9 -0
- package/dist/-private/-type-tests/plugin-properties.test.js +4 -8
- package/dist/-private/-type-tests/plugin-properties.test.js.map +1 -1
- package/dist/-private/-type-tests/plugin-with.test.js.map +1 -1
- package/dist/-private/-type-tests/plugins-accessors.test.js +12 -11
- package/dist/-private/-type-tests/plugins-accessors.test.js.map +1 -1
- package/dist/-private/-type-tests/plugins-signature-from.test.js +7 -6
- package/dist/-private/-type-tests/plugins-signature-from.test.js.map +1 -1
- package/dist/-private/-type-tests/plugins-signature-utils.test.js.map +1 -1
- package/dist/-private/-type-tests/table-api.test.js +3 -2
- package/dist/-private/-type-tests/table-api.test.js.map +1 -1
- package/dist/-private/-type-tests/table-config.test.js +8 -11
- package/dist/-private/-type-tests/table-config.test.js.map +1 -1
- package/dist/-private/column.d.ts +1 -1
- package/dist/-private/column.js +7 -15
- package/dist/-private/column.js.map +1 -1
- package/dist/-private/js-helper.d.ts +1 -1
- package/dist/-private/js-helper.js +2 -3
- package/dist/-private/js-helper.js.map +1 -1
- package/dist/-private/preferences.js +7 -39
- package/dist/-private/preferences.js.map +1 -1
- package/dist/-private/row.d.ts +1 -1
- package/dist/-private/row.js +4 -15
- package/dist/-private/row.js.map +1 -1
- package/dist/-private/table.js +3 -3
- package/dist/-private/utils.js +0 -2
- package/dist/-private/utils.js.map +1 -1
- package/dist/{applyDecoratedDescriptor-e0489e2f.js → applyDecoratedDescriptor-6b986a67.js} +1 -6
- package/dist/applyDecoratedDescriptor-6b986a67.js.map +1 -0
- package/dist/{classPrivateFieldGet-af59a8ea.js → classPrivateFieldGet-b4d7d334.js} +1 -3
- package/dist/{classPrivateFieldGet-af59a8ea.js.map → classPrivateFieldGet-b4d7d334.js.map} +1 -1
- package/dist/{defineProperty-a0196711.js → defineProperty-35ce617b.js} +1 -2
- package/dist/defineProperty-35ce617b.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/plugins/-private/base.d.ts +1 -1
- package/dist/plugins/-private/base.js +18 -59
- package/dist/plugins/-private/base.js.map +1 -1
- package/dist/plugins/-private/utils.js +5 -20
- package/dist/plugins/-private/utils.js.map +1 -1
- package/dist/plugins/column-reordering/helpers.d.ts +9 -4
- package/dist/plugins/column-reordering/helpers.js +13 -6
- package/dist/plugins/column-reordering/helpers.js.map +1 -1
- package/dist/plugins/column-reordering/index.js +1 -1
- package/dist/plugins/column-reordering/plugin.d.ts +57 -11
- package/dist/plugins/column-reordering/plugin.js +109 -130
- package/dist/plugins/column-reordering/plugin.js.map +1 -1
- package/dist/plugins/column-reordering/utils.js +0 -7
- package/dist/plugins/column-reordering/utils.js.map +1 -1
- package/dist/plugins/column-resizing/handle.js +4 -33
- package/dist/plugins/column-resizing/handle.js.map +1 -1
- package/dist/plugins/column-resizing/helpers.js +2 -2
- package/dist/plugins/column-resizing/helpers.js.map +1 -1
- package/dist/plugins/column-resizing/plugin.js +15 -64
- package/dist/plugins/column-resizing/plugin.js.map +1 -1
- package/dist/plugins/column-resizing/resize-observer.js +1 -3
- package/dist/plugins/column-resizing/resize-observer.js.map +1 -1
- package/dist/plugins/column-resizing/utils.js +0 -2
- package/dist/plugins/column-resizing/utils.js.map +1 -1
- package/dist/plugins/column-visibility/helpers.js +3 -3
- package/dist/plugins/column-visibility/helpers.js.map +1 -1
- package/dist/plugins/column-visibility/plugin.js +6 -26
- package/dist/plugins/column-visibility/plugin.js.map +1 -1
- package/dist/plugins/data-sorting/helpers.js +7 -7
- package/dist/plugins/data-sorting/helpers.js.map +1 -1
- package/dist/plugins/data-sorting/plugin.js +2 -32
- package/dist/plugins/data-sorting/plugin.js.map +1 -1
- package/dist/plugins/data-sorting/types.js +0 -3
- package/dist/plugins/data-sorting/types.js.map +1 -1
- package/dist/plugins/metadata/helpers.d.ts +4 -0
- package/dist/plugins/metadata/helpers.js +12 -0
- package/dist/plugins/metadata/helpers.js.map +1 -0
- package/dist/plugins/metadata/index.d.ts +3 -0
- package/dist/plugins/metadata/index.js +3 -0
- package/dist/plugins/metadata/index.js.map +1 -0
- package/dist/plugins/metadata/plugin.d.ts +24 -0
- package/dist/plugins/metadata/plugin.js +25 -0
- package/dist/plugins/metadata/plugin.js.map +1 -0
- package/dist/plugins/row-selection/helpers.js.map +1 -1
- package/dist/plugins/row-selection/plugin.js +5 -42
- package/dist/plugins/row-selection/plugin.js.map +1 -1
- package/dist/plugins/sticky-columns/helpers.js.map +1 -1
- package/dist/plugins/sticky-columns/plugin.js +4 -28
- package/dist/plugins/sticky-columns/plugin.js.map +1 -1
- package/dist/{table-8e46554b.d.ts → table-222f44e7.d.ts} +0 -0
- package/dist/{table-8e46554b.js → table-222f44e7.js} +17 -33
- package/dist/{table-8e46554b.js.map → table-222f44e7.js.map} +1 -1
- package/dist/test-support/index.js +2 -6
- package/dist/test-support/index.js.map +1 -1
- package/dist/utils.js +2 -5
- package/dist/utils.js.map +1 -1
- package/package.json +18 -32
- package/dist/applyDecoratedDescriptor-e0489e2f.js.map +0 -1
- package/dist/defineProperty-a0196711.js.map +0 -1
@@ -1,7 +1,7 @@
|
|
1
|
-
import { _ as _initializerDefineProperty } from '../../table-
|
2
|
-
import { _ as _applyDecoratedDescriptor } from '../../applyDecoratedDescriptor-
|
3
|
-
import { a as _classPrivateFieldGet } from '../../classPrivateFieldGet-
|
4
|
-
import { _ as _defineProperty } from '../../defineProperty-
|
1
|
+
import { _ as _initializerDefineProperty } from '../../table-222f44e7.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
|
-
|
53
|
-
|
54
|
-
_defineProperty(this, "moveRight", () =>
|
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.
|
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
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
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
|
-
|
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
|
-
*
|
245
|
+
* Position to swap to must exist
|
213
246
|
*/
|
214
|
-
|
215
|
-
|
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 (
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
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,
|
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;;;;"}
|