@universal-ember/table 3.0.0 → 3.0.1
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/dist/-private/-type-tests/plugin-properties.test.js +27 -0
- package/dist/-private/-type-tests/plugin-properties.test.js.map +1 -0
- package/dist/-private/-type-tests/plugin-with.test.js +20 -0
- package/dist/-private/-type-tests/plugin-with.test.js.map +1 -0
- package/dist/-private/-type-tests/plugins-accessors.test.js +36 -0
- package/dist/-private/-type-tests/plugins-accessors.test.js.map +1 -0
- package/dist/-private/-type-tests/plugins-signature-from.test.js +15 -0
- package/dist/-private/-type-tests/plugins-signature-from.test.js.map +1 -0
- package/dist/-private/-type-tests/plugins-signature-utils.test.js +36 -0
- package/dist/-private/-type-tests/plugins-signature-utils.test.js.map +1 -0
- package/dist/-private/-type-tests/table-api.test.js +17 -0
- package/dist/-private/-type-tests/table-api.test.js.map +1 -0
- package/dist/-private/-type-tests/table-config.test.js +55 -0
- package/dist/-private/-type-tests/table-config.test.js.map +1 -0
- package/dist/-private/column.js +62 -0
- package/dist/-private/column.js.map +1 -0
- package/dist/-private/ember-compat.js +17 -0
- package/dist/-private/ember-compat.js.map +1 -0
- package/dist/-private/interfaces/column.js +2 -0
- package/dist/-private/interfaces/column.js.map +1 -0
- package/dist/-private/interfaces/index.js +2 -0
- package/dist/-private/interfaces/index.js.map +1 -0
- package/dist/-private/interfaces/modifier.js +2 -0
- package/dist/-private/interfaces/modifier.js.map +1 -0
- package/dist/-private/interfaces/pagination.js +2 -0
- package/dist/-private/interfaces/pagination.js.map +1 -0
- package/dist/-private/interfaces/plugins.js +2 -0
- package/dist/-private/interfaces/plugins.js.map +1 -0
- package/dist/-private/interfaces/preferences.js +2 -0
- package/dist/-private/interfaces/preferences.js.map +1 -0
- package/dist/-private/interfaces/selection.js +2 -0
- package/dist/-private/interfaces/selection.js.map +1 -0
- package/dist/-private/interfaces/table.js +2 -0
- package/dist/-private/interfaces/table.js.map +1 -0
- package/dist/-private/js-helper.js +55 -0
- package/dist/-private/js-helper.js.map +1 -0
- package/dist/-private/preferences.js +143 -0
- package/dist/-private/preferences.js.map +1 -0
- package/dist/-private/private-types.js +2 -0
- package/dist/-private/private-types.js.map +1 -0
- package/dist/-private/row.js +51 -0
- package/dist/-private/row.js.map +1 -0
- package/dist/-private/table.js +273 -0
- package/dist/-private/table.js.map +1 -0
- package/dist/-private/utils.js +15 -0
- package/dist/-private/utils.js.map +1 -0
- package/dist/_rollupPluginBabelHelpers-BpiaYhlf.js +63 -0
- package/dist/_rollupPluginBabelHelpers-BpiaYhlf.js.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/-private/base.js +524 -0
- package/dist/plugins/-private/base.js.map +1 -0
- package/dist/plugins/-private/utils.js +103 -0
- package/dist/plugins/-private/utils.js.map +1 -0
- package/dist/plugins/column-reordering/helpers.js +44 -0
- package/dist/plugins/column-reordering/helpers.js.map +1 -0
- package/dist/plugins/column-reordering/index.js +3 -0
- package/dist/plugins/column-reordering/index.js.map +1 -0
- package/dist/plugins/column-reordering/plugin.js +359 -0
- package/dist/plugins/column-reordering/plugin.js.map +1 -0
- package/dist/plugins/column-reordering/utils.js +34 -0
- package/dist/plugins/column-reordering/utils.js.map +1 -0
- package/dist/plugins/column-resizing/handle.js +241 -0
- package/dist/plugins/column-resizing/handle.js.map +1 -0
- package/dist/plugins/column-resizing/helpers.js +71 -0
- package/dist/plugins/column-resizing/helpers.js.map +1 -0
- package/dist/plugins/column-resizing/index.js +4 -0
- package/dist/plugins/column-resizing/index.js.map +1 -0
- package/dist/plugins/column-resizing/plugin.js +328 -0
- package/dist/plugins/column-resizing/plugin.js.map +1 -0
- package/dist/plugins/column-resizing/resize-observer.js +44 -0
- package/dist/plugins/column-resizing/resize-observer.js.map +1 -0
- package/dist/plugins/column-resizing/utils.js +44 -0
- package/dist/plugins/column-resizing/utils.js.map +1 -0
- package/dist/plugins/column-visibility/helpers.js +25 -0
- package/dist/plugins/column-visibility/helpers.js.map +1 -0
- package/dist/plugins/column-visibility/index.js +3 -0
- package/dist/plugins/column-visibility/index.js.map +1 -0
- package/dist/plugins/column-visibility/plugin.js +92 -0
- package/dist/plugins/column-visibility/plugin.js.map +1 -0
- package/dist/plugins/data-sorting/helpers.js +49 -0
- package/dist/plugins/data-sorting/helpers.js.map +1 -0
- package/dist/plugins/data-sorting/index.js +4 -0
- package/dist/plugins/data-sorting/index.js.map +1 -0
- package/dist/plugins/data-sorting/plugin.js +132 -0
- package/dist/plugins/data-sorting/plugin.js.map +1 -0
- package/dist/plugins/data-sorting/types.js +14 -0
- package/dist/plugins/data-sorting/types.js.map +1 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/metadata/helpers.js +12 -0
- package/dist/plugins/metadata/helpers.js.map +1 -0
- package/dist/plugins/metadata/index.js +3 -0
- package/dist/plugins/metadata/index.js.map +1 -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 +10 -0
- package/dist/plugins/row-selection/helpers.js.map +1 -0
- package/dist/plugins/row-selection/index.js +3 -0
- package/dist/plugins/row-selection/index.js.map +1 -0
- package/dist/plugins/row-selection/plugin.js +118 -0
- package/dist/plugins/row-selection/plugin.js.map +1 -0
- package/dist/plugins/sticky-columns/helpers.js +49 -0
- package/dist/plugins/sticky-columns/helpers.js.map +1 -0
- package/dist/plugins/sticky-columns/index.js +3 -0
- package/dist/plugins/sticky-columns/index.js.map +1 -0
- package/dist/plugins/sticky-columns/plugin.js +139 -0
- package/dist/plugins/sticky-columns/plugin.js.map +1 -0
- package/dist/test-support/index.js +62 -0
- package/dist/test-support/index.js.map +1 -0
- package/dist/utils.js +77 -0
- package/dist/utils.js.map +1 -0
- package/package.json +3 -2
- package/src/-private/-type-tests/plugin-properties.test.ts +38 -0
- package/src/-private/-type-tests/plugin-with.test.ts +23 -0
- package/src/-private/-type-tests/plugins-accessors.test.ts +86 -0
- package/src/-private/-type-tests/plugins-signature-from.test.ts +66 -0
- package/src/-private/-type-tests/plugins-signature-utils.test.ts +154 -0
- package/src/-private/-type-tests/table-api.test.ts +20 -0
- package/src/-private/-type-tests/table-config.test.ts +70 -0
- package/src/-private/column.ts +67 -0
- package/src/-private/ember-compat.ts +26 -0
- package/src/-private/interfaces/column.ts +73 -0
- package/src/-private/interfaces/index.ts +7 -0
- package/src/-private/interfaces/modifier.ts +7 -0
- package/src/-private/interfaces/pagination.ts +13 -0
- package/src/-private/interfaces/plugins.ts +349 -0
- package/src/-private/interfaces/preferences.ts +82 -0
- package/src/-private/interfaces/selection.ts +38 -0
- package/src/-private/interfaces/table.ts +121 -0
- package/src/-private/js-helper.ts +65 -0
- package/src/-private/preferences.ts +176 -0
- package/src/-private/private-types.ts +8 -0
- package/src/-private/row.ts +66 -0
- package/src/-private/table.ts +310 -0
- package/src/-private/utils.ts +21 -0
- package/src/index.ts +25 -0
- package/src/plugins/-private/base.ts +836 -0
- package/src/plugins/-private/utils.ts +166 -0
- package/src/plugins/column-reordering/helpers.ts +50 -0
- package/src/plugins/column-reordering/index.ts +6 -0
- package/src/plugins/column-reordering/plugin.ts +489 -0
- package/src/plugins/column-reordering/utils.ts +48 -0
- package/src/plugins/column-resizing/handle.ts +280 -0
- package/src/plugins/column-resizing/helpers.ts +79 -0
- package/src/plugins/column-resizing/index.ts +7 -0
- package/src/plugins/column-resizing/plugin.ts +490 -0
- package/src/plugins/column-resizing/resize-observer.ts +48 -0
- package/src/plugins/column-resizing/utils.ts +54 -0
- package/src/plugins/column-visibility/helpers.ts +28 -0
- package/src/plugins/column-visibility/index.ts +6 -0
- package/src/plugins/column-visibility/plugin.ts +155 -0
- package/src/plugins/data-sorting/helpers.ts +56 -0
- package/src/plugins/data-sorting/index.ts +8 -0
- package/src/plugins/data-sorting/plugin.ts +222 -0
- package/src/plugins/data-sorting/types.ts +26 -0
- package/src/plugins/index.ts +20 -0
- package/src/plugins/metadata/helpers.ts +12 -0
- package/src/plugins/metadata/index.ts +7 -0
- package/src/plugins/metadata/plugin.ts +26 -0
- package/src/plugins/row-selection/helpers.ts +13 -0
- package/src/plugins/row-selection/index.ts +7 -0
- package/src/plugins/row-selection/plugin.ts +218 -0
- package/src/plugins/sticky-columns/helpers.ts +59 -0
- package/src/plugins/sticky-columns/index.ts +7 -0
- package/src/plugins/sticky-columns/plugin.ts +201 -0
- package/src/test-support/index.ts +76 -0
- package/src/utils.ts +85 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { _ as _defineProperty, a as _applyDecoratedDescriptor } from '../../_rollupPluginBabelHelpers-BpiaYhlf.js';
|
|
2
|
+
import { cached } from '@glimmer/tracking';
|
|
3
|
+
import { assert } from '@ember/debug';
|
|
4
|
+
import { BasePlugin, options, meta, columns } from '../-private/base.js';
|
|
5
|
+
import { applyStyles } from '../-private/utils.js';
|
|
6
|
+
|
|
7
|
+
var _class;
|
|
8
|
+
const DEFAULT_Z_INDEX = '8';
|
|
9
|
+
class StickyColumns extends BasePlugin {
|
|
10
|
+
constructor(...args) {
|
|
11
|
+
super(...args);
|
|
12
|
+
_defineProperty(this, "name", 'sticky-columns');
|
|
13
|
+
_defineProperty(this, "meta", {
|
|
14
|
+
table: TableMeta,
|
|
15
|
+
column: ColumnMeta
|
|
16
|
+
});
|
|
17
|
+
_defineProperty(this, "conditionallyRemoveStyles", element => {
|
|
18
|
+
if (element.style.getPropertyValue('position') === 'sticky') {
|
|
19
|
+
element.style.removeProperty('position');
|
|
20
|
+
}
|
|
21
|
+
if (element.style.getPropertyValue('left')) {
|
|
22
|
+
element.style.left = '';
|
|
23
|
+
}
|
|
24
|
+
if (element.style.getPropertyValue('right')) {
|
|
25
|
+
element.style.right = '';
|
|
26
|
+
}
|
|
27
|
+
if (element.style.zIndex === DEFAULT_Z_INDEX) {
|
|
28
|
+
element.style.zIndex = '';
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
_defineProperty(this, "headerCellModifier", (element, {
|
|
32
|
+
column,
|
|
33
|
+
table
|
|
34
|
+
}) => {
|
|
35
|
+
if (options.forTable(table, StickyColumns).workaroundForModifierTimingUpdateRFC883) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const columnMeta = meta.forColumn(column, StickyColumns);
|
|
39
|
+
if (columnMeta.isSticky) {
|
|
40
|
+
applyStyles(element, columnMeta.style);
|
|
41
|
+
} else {
|
|
42
|
+
this.conditionallyRemoveStyles(element);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
/**
|
|
46
|
+
* Not yet supported. Pending Ember RFC #883
|
|
47
|
+
*
|
|
48
|
+
* TODO: switch ColumnApi to "RowApi", add the row's data
|
|
49
|
+
*/
|
|
50
|
+
_defineProperty(this, "cellModifier", (element, {
|
|
51
|
+
column,
|
|
52
|
+
table
|
|
53
|
+
}) => {
|
|
54
|
+
if (options.forTable(table, StickyColumns).workaroundForModifierTimingUpdateRFC883) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const columnMeta = meta.forColumn(column, StickyColumns);
|
|
58
|
+
if (columnMeta.isSticky) {
|
|
59
|
+
applyStyles(element, columnMeta.style);
|
|
60
|
+
} else {
|
|
61
|
+
this.conditionallyRemoveStyles(element);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @private
|
|
69
|
+
*
|
|
70
|
+
* Contains state and behaviors for the sticiness
|
|
71
|
+
*/
|
|
72
|
+
/**
|
|
73
|
+
* This plugin requires that the resizing plugin be present, because the resizing plugin is
|
|
74
|
+
* what manages the base width of the columns.
|
|
75
|
+
*
|
|
76
|
+
* Other width-management plugins can be used instead of ColumnResizing, but they must declare
|
|
77
|
+
* that they manage the width of the columns.
|
|
78
|
+
*/
|
|
79
|
+
_defineProperty(StickyColumns, "requires", ['columnWidth']);
|
|
80
|
+
let ColumnMeta = (_class = class ColumnMeta {
|
|
81
|
+
constructor(column) {
|
|
82
|
+
this.column = column;
|
|
83
|
+
}
|
|
84
|
+
get isSticky() {
|
|
85
|
+
return this.position !== 'none';
|
|
86
|
+
}
|
|
87
|
+
get position() {
|
|
88
|
+
const sticky = options.forColumn(this.column, StickyColumns)?.sticky;
|
|
89
|
+
assert(`Invalid sticky value, ${sticky}. Valid values: 'left', 'right', false`, sticky === 'left' || sticky === 'right' || sticky === false || sticky === undefined);
|
|
90
|
+
return sticky || 'none';
|
|
91
|
+
}
|
|
92
|
+
get offset() {
|
|
93
|
+
if (!this.isSticky) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (this.position === 'left') {
|
|
97
|
+
const leftColumns = columns.before(this.column);
|
|
98
|
+
const left = leftColumns.reduce((acc, column) => {
|
|
99
|
+
const columnMeta = meta.withFeature.forColumn(column, 'columnWidth');
|
|
100
|
+
if (hasWidth(columnMeta)) {
|
|
101
|
+
return acc + (columnMeta.width ?? 0);
|
|
102
|
+
}
|
|
103
|
+
return acc;
|
|
104
|
+
}, 0);
|
|
105
|
+
return `${left}px`;
|
|
106
|
+
}
|
|
107
|
+
if (this.position === 'right') {
|
|
108
|
+
const rightColumns = columns.after(this.column);
|
|
109
|
+
const right = rightColumns.reduce((acc, column) => {
|
|
110
|
+
const columnMeta = meta.withFeature.forColumn(column, 'columnWidth');
|
|
111
|
+
if (hasWidth(columnMeta)) {
|
|
112
|
+
return acc + (columnMeta.width ?? 0);
|
|
113
|
+
}
|
|
114
|
+
return acc;
|
|
115
|
+
}, 0);
|
|
116
|
+
return `${right}px`;
|
|
117
|
+
}
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
get style() {
|
|
121
|
+
if (this.isSticky) {
|
|
122
|
+
return {
|
|
123
|
+
position: 'sticky',
|
|
124
|
+
[this.position]: this.offset,
|
|
125
|
+
zIndex: DEFAULT_Z_INDEX
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
return {};
|
|
129
|
+
}
|
|
130
|
+
}, _applyDecoratedDescriptor(_class.prototype, "offset", [cached], Object.getOwnPropertyDescriptor(_class.prototype, "offset"), _class.prototype), _class);
|
|
131
|
+
function hasWidth(obj) {
|
|
132
|
+
return typeof obj === 'object' && obj && 'width' in obj;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* This Plugin does not need table state */
|
|
136
|
+
class TableMeta {}
|
|
137
|
+
|
|
138
|
+
export { ColumnMeta, StickyColumns, TableMeta };
|
|
139
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["../../../src/plugins/sticky-columns/plugin.ts"],"sourcesContent":["import { cached } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\n\nimport { BasePlugin, columns, meta, options } from '../-private/base.ts';\nimport { applyStyles } from '../-private/utils.ts';\n\nimport type { ColumnApi } from '../../plugins/index.ts';\nimport type { Column } from '../../index.ts';\n\nconst DEFAULT_Z_INDEX = '8';\n\ninterface ColumnOptions {\n /**\n * Whether or not to enable stickiness on the column\n * (default is false)\n *\n * valid values: 'left', 'right', false\n */\n sticky?: boolean | string;\n}\n\nexport interface Signature {\n Options: {\n Column: ColumnOptions;\n Plugin: {\n /**\n * Opts this plugin out of engaging in the modifier system\n * and instead requires setting a `style` attribute on\n * th / td tags for getting the \"position: sticky\" behovior\n * on columns.\n */\n workaroundForModifierTimingUpdateRFC883?: boolean;\n };\n };\n Meta: {\n Table: TableMeta;\n Column: ColumnMeta;\n };\n}\n\nexport class StickyColumns extends BasePlugin<Signature> {\n name = 'sticky-columns';\n\n /**\n * This plugin requires that the resizing plugin be present, because the resizing plugin is\n * what manages the base width of the columns.\n *\n * Other width-management plugins can be used instead of ColumnResizing, but they must declare\n * that they manage the width of the columns.\n */\n static requires = ['columnWidth'];\n\n meta = {\n table: TableMeta,\n column: ColumnMeta,\n };\n\n conditionallyRemoveStyles = (element: HTMLElement) => {\n if (element.style.getPropertyValue('position') === 'sticky') {\n element.style.removeProperty('position');\n }\n\n if (element.style.getPropertyValue('left')) {\n element.style.left = '';\n }\n\n if (element.style.getPropertyValue('right')) {\n element.style.right = '';\n }\n\n if (element.style.zIndex === DEFAULT_Z_INDEX) {\n element.style.zIndex = '';\n }\n };\n\n headerCellModifier = (element: HTMLElement, { column, table }: ColumnApi) => {\n if (\n options.forTable(table, StickyColumns)\n .workaroundForModifierTimingUpdateRFC883\n ) {\n return;\n }\n\n const columnMeta = meta.forColumn(column, StickyColumns);\n\n if (columnMeta.isSticky) {\n applyStyles(element, columnMeta.style);\n } else {\n this.conditionallyRemoveStyles(element);\n }\n };\n\n /**\n * Not yet supported. Pending Ember RFC #883\n *\n * TODO: switch ColumnApi to \"RowApi\", add the row's data\n */\n cellModifier = (element: HTMLElement, { column, table }: ColumnApi) => {\n if (\n options.forTable(table, StickyColumns)\n .workaroundForModifierTimingUpdateRFC883\n ) {\n return;\n }\n\n const columnMeta = meta.forColumn(column, StickyColumns);\n\n if (columnMeta.isSticky) {\n applyStyles(element, columnMeta.style);\n } else {\n this.conditionallyRemoveStyles(element);\n }\n };\n}\n\n/**\n * @private\n *\n * Contains state and behaviors for the sticiness\n */\nexport class ColumnMeta {\n constructor(private column: Column) {}\n\n get isSticky() {\n return this.position !== 'none';\n }\n\n get position(): 'left' | 'right' | 'none' {\n const sticky = options.forColumn(this.column, StickyColumns)?.sticky;\n\n assert(\n `Invalid sticky value, ${sticky}. Valid values: 'left', 'right', false`,\n sticky === 'left' ||\n sticky === 'right' ||\n sticky === false ||\n sticky === undefined,\n );\n\n return sticky || 'none';\n }\n\n @cached\n get offset() {\n if (!this.isSticky) {\n return;\n }\n\n if (this.position === 'left') {\n const leftColumns = columns.before(this.column);\n const left = leftColumns.reduce((acc, column) => {\n const columnMeta = meta.withFeature.forColumn(column, 'columnWidth');\n\n if (hasWidth(columnMeta)) {\n return acc + (columnMeta.width ?? 0);\n }\n\n return acc;\n }, 0);\n\n return `${left}px`;\n }\n\n if (this.position === 'right') {\n const rightColumns = columns.after(this.column);\n const right = rightColumns.reduce((acc, column) => {\n const columnMeta = meta.withFeature.forColumn(column, 'columnWidth');\n\n if (hasWidth(columnMeta)) {\n return acc + (columnMeta.width ?? 0);\n }\n\n return acc;\n }, 0);\n\n return `${right}px`;\n }\n\n return;\n }\n\n get style(): Partial<\n Pick<CSSStyleDeclaration, 'position' | 'left' | 'right' | 'zIndex'>\n > {\n if (this.isSticky) {\n return {\n position: 'sticky',\n [this.position]: this.offset,\n zIndex: DEFAULT_Z_INDEX,\n };\n }\n\n return {};\n }\n}\n\nfunction hasWidth(obj: any): obj is { width?: number } {\n return typeof obj === 'object' && obj && 'width' in obj;\n}\n\n/* This Plugin does not need table state */\nexport class TableMeta {}\n"],"names":["DEFAULT_Z_INDEX","StickyColumns","BasePlugin","constructor","args","_defineProperty","table","TableMeta","column","ColumnMeta","element","style","getPropertyValue","removeProperty","left","right","zIndex","options","forTable","workaroundForModifierTimingUpdateRFC883","columnMeta","meta","forColumn","isSticky","applyStyles","conditionallyRemoveStyles","_class","position","sticky","assert","undefined","offset","leftColumns","columns","before","reduce","acc","withFeature","hasWidth","width","rightColumns","after","_applyDecoratedDescriptor","prototype","cached","Object","getOwnPropertyDescriptor","obj"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { assert } from '@ember/debug';
|
|
2
|
+
import { settled, triggerEvent, find } from '@ember/test-helpers';
|
|
3
|
+
|
|
4
|
+
function createHelpers(selectors) {
|
|
5
|
+
async function resize(parent, delta) {
|
|
6
|
+
assert(`Can't use the dragLeft/dragRight/resize helpers without a \`resizeHandle\` selector`, selectors.resizeHandle);
|
|
7
|
+
const element = parent.querySelector(selectors.resizeHandle);
|
|
8
|
+
assert(`Can't resize without a handle`, element);
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Start the click in exactly the middle of the element.
|
|
12
|
+
* "startX" is the horizontal middle of "element"
|
|
13
|
+
*/
|
|
14
|
+
const rect = element.getBoundingClientRect();
|
|
15
|
+
const startX = (rect.right + rect.left) / 2;
|
|
16
|
+
const targetX = startX + delta;
|
|
17
|
+
triggerEvent(element, 'mousedown', {
|
|
18
|
+
clientX: startX,
|
|
19
|
+
button: 0
|
|
20
|
+
});
|
|
21
|
+
triggerEvent(element, 'mousemove', {
|
|
22
|
+
clientX: targetX,
|
|
23
|
+
button: 0
|
|
24
|
+
});
|
|
25
|
+
triggerEvent(element, 'mouseup', {
|
|
26
|
+
clientX: targetX,
|
|
27
|
+
button: 0
|
|
28
|
+
});
|
|
29
|
+
await settled();
|
|
30
|
+
}
|
|
31
|
+
function horizontalScrollElement() {
|
|
32
|
+
assert(`Can't use scrollRight/swipeLeft helpers without a \`scrollContainer\` selector`, selectors.scrollContainer);
|
|
33
|
+
const element = find(selectors.scrollContainer);
|
|
34
|
+
assert(`scroll container not found`, element instanceof HTMLElement);
|
|
35
|
+
return element;
|
|
36
|
+
}
|
|
37
|
+
async function scrollRight(distance) {
|
|
38
|
+
const element = horizontalScrollElement();
|
|
39
|
+
element.scrollLeft += distance;
|
|
40
|
+
await requestAnimationFrameSettled();
|
|
41
|
+
}
|
|
42
|
+
async function scrollLeft(distance) {
|
|
43
|
+
const element = horizontalScrollElement();
|
|
44
|
+
element.scrollLeft -= distance;
|
|
45
|
+
await requestAnimationFrameSettled();
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
dragLeft: (column, amount) => resize(column, -amount),
|
|
49
|
+
dragRight: (column, amount) => resize(column, amount),
|
|
50
|
+
scrollLeft,
|
|
51
|
+
scrollRight,
|
|
52
|
+
swipeLeft: scrollRight,
|
|
53
|
+
swipeRight: scrollLeft
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async function requestAnimationFrameSettled() {
|
|
57
|
+
await new Promise(requestAnimationFrame);
|
|
58
|
+
await settled();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export { createHelpers, requestAnimationFrameSettled };
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/test-support/index.ts"],"sourcesContent":["import { assert } from '@ember/debug';\nimport { find, settled, triggerEvent } from '@ember/test-helpers';\n\ninterface Selectors {\n resizeHandle?: string;\n scrollContainer?: string;\n}\n\nexport function createHelpers(selectors: Selectors) {\n async function resize(parent: Element, delta: number) {\n assert(\n `Can't use the dragLeft/dragRight/resize helpers without a \\`resizeHandle\\` selector`,\n selectors.resizeHandle,\n );\n\n const element = parent.querySelector(selectors.resizeHandle);\n\n assert(`Can't resize without a handle`, element);\n\n /**\n * Start the click in exactly the middle of the element.\n * \"startX\" is the horizontal middle of \"element\"\n */\n const rect = element.getBoundingClientRect();\n const startX = (rect.right + rect.left) / 2;\n\n const targetX = startX + delta;\n\n triggerEvent(element, 'mousedown', { clientX: startX, button: 0 });\n triggerEvent(element, 'mousemove', { clientX: targetX, button: 0 });\n triggerEvent(element, 'mouseup', { clientX: targetX, button: 0 });\n\n await settled();\n }\n\n function horizontalScrollElement() {\n assert(\n `Can't use scrollRight/swipeLeft helpers without a \\`scrollContainer\\` selector`,\n selectors.scrollContainer,\n );\n\n const element = find(selectors.scrollContainer);\n\n assert(`scroll container not found`, element instanceof HTMLElement);\n\n return element;\n }\n\n async function scrollRight(distance: number) {\n const element = horizontalScrollElement();\n\n element.scrollLeft += distance;\n await requestAnimationFrameSettled();\n }\n\n async function scrollLeft(distance: number) {\n const element = horizontalScrollElement();\n\n element.scrollLeft -= distance;\n await requestAnimationFrameSettled();\n }\n\n return {\n dragLeft: (column: Element, amount: number) => resize(column, -amount),\n dragRight: (column: Element, amount: number) => resize(column, amount),\n scrollLeft,\n scrollRight,\n swipeLeft: scrollRight,\n swipeRight: scrollLeft,\n };\n}\n\nexport async function requestAnimationFrameSettled() {\n await new Promise(requestAnimationFrame);\n await settled();\n}\n"],"names":["createHelpers","selectors","resize","parent","delta","assert","resizeHandle","element","querySelector","rect","getBoundingClientRect","startX","right","left","targetX","triggerEvent","clientX","button","settled","horizontalScrollElement","scrollContainer","find","HTMLElement","scrollRight","distance","scrollLeft","requestAnimationFrameSettled","dragLeft","column","amount","dragRight","swipeLeft","swipeRight","Promise","requestAnimationFrame"],"mappings":";;;AAQO,SAASA,aAAaA,CAACC,SAAoB,EAAE;AAClD,EAAA,eAAeC,MAAMA,CAACC,MAAe,EAAEC,KAAa,EAAE;AACpDC,IAAAA,MAAM,CACJ,CAAqF,mFAAA,CAAA,EACrFJ,SAAS,CAACK,YACZ,CAAC;IAED,MAAMC,OAAO,GAAGJ,MAAM,CAACK,aAAa,CAACP,SAAS,CAACK,YAAY,CAAC;AAE5DD,IAAAA,MAAM,CAAC,CAAA,6BAAA,CAA+B,EAAEE,OAAO,CAAC;;AAEhD;AACJ;AACA;AACA;AACI,IAAA,MAAME,IAAI,GAAGF,OAAO,CAACG,qBAAqB,EAAE;IAC5C,MAAMC,MAAM,GAAG,CAACF,IAAI,CAACG,KAAK,GAAGH,IAAI,CAACI,IAAI,IAAI,CAAC;AAE3C,IAAA,MAAMC,OAAO,GAAGH,MAAM,GAAGP,KAAK;AAE9BW,IAAAA,YAAY,CAACR,OAAO,EAAE,WAAW,EAAE;AAAES,MAAAA,OAAO,EAAEL,MAAM;AAAEM,MAAAA,MAAM,EAAE;AAAE,KAAC,CAAC;AAClEF,IAAAA,YAAY,CAACR,OAAO,EAAE,WAAW,EAAE;AAAES,MAAAA,OAAO,EAAEF,OAAO;AAAEG,MAAAA,MAAM,EAAE;AAAE,KAAC,CAAC;AACnEF,IAAAA,YAAY,CAACR,OAAO,EAAE,SAAS,EAAE;AAAES,MAAAA,OAAO,EAAEF,OAAO;AAAEG,MAAAA,MAAM,EAAE;AAAE,KAAC,CAAC;IAEjE,MAAMC,OAAO,EAAE;AACjB;EAEA,SAASC,uBAAuBA,GAAG;AACjCd,IAAAA,MAAM,CACJ,CAAgF,8EAAA,CAAA,EAChFJ,SAAS,CAACmB,eACZ,CAAC;AAED,IAAA,MAAMb,OAAO,GAAGc,IAAI,CAACpB,SAAS,CAACmB,eAAe,CAAC;AAE/Cf,IAAAA,MAAM,CAAC,CAA4B,0BAAA,CAAA,EAAEE,OAAO,YAAYe,WAAW,CAAC;AAEpE,IAAA,OAAOf,OAAO;AAChB;EAEA,eAAegB,WAAWA,CAACC,QAAgB,EAAE;AAC3C,IAAA,MAAMjB,OAAO,GAAGY,uBAAuB,EAAE;IAEzCZ,OAAO,CAACkB,UAAU,IAAID,QAAQ;IAC9B,MAAME,4BAA4B,EAAE;AACtC;EAEA,eAAeD,UAAUA,CAACD,QAAgB,EAAE;AAC1C,IAAA,MAAMjB,OAAO,GAAGY,uBAAuB,EAAE;IAEzCZ,OAAO,CAACkB,UAAU,IAAID,QAAQ;IAC9B,MAAME,4BAA4B,EAAE;AACtC;EAEA,OAAO;AACLC,IAAAA,QAAQ,EAAEA,CAACC,MAAe,EAAEC,MAAc,KAAK3B,MAAM,CAAC0B,MAAM,EAAE,CAACC,MAAM,CAAC;IACtEC,SAAS,EAAEA,CAACF,MAAe,EAAEC,MAAc,KAAK3B,MAAM,CAAC0B,MAAM,EAAEC,MAAM,CAAC;IACtEJ,UAAU;IACVF,WAAW;AACXQ,IAAAA,SAAS,EAAER,WAAW;AACtBS,IAAAA,UAAU,EAAEP;GACb;AACH;AAEO,eAAeC,4BAA4BA,GAAG;AACnD,EAAA,MAAM,IAAIO,OAAO,CAACC,qBAAqB,CAAC;EACxC,MAAMhB,OAAO,EAAE;AACjB;;;;"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { assert } from '@ember/debug';
|
|
2
|
+
import { camelize, underscore } from '@ember/string';
|
|
3
|
+
import { SortDirection } from './plugins/data-sorting/types.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @example
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* deserializeSorts('first_name.asc', { separator: '.', transform: 'camelize' });
|
|
10
|
+
* // => [{ property: 'firstName', direction: 'ascending' }]
|
|
11
|
+
*
|
|
12
|
+
* deserializeSorts('last_name.desc', { separator: '.', transform: 'camelize' });
|
|
13
|
+
* // => [{ property: 'lastName', direction: 'descending' }]
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const deserializeSorts = (sortString, options = {
|
|
18
|
+
separator: '.',
|
|
19
|
+
transform: 'camelize'
|
|
20
|
+
}) => {
|
|
21
|
+
if (!sortString) {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
const {
|
|
25
|
+
transform,
|
|
26
|
+
separator
|
|
27
|
+
} = options;
|
|
28
|
+
let [key, direction] = sortString.split(separator);
|
|
29
|
+
assert(`No key found for input: \`${sortString}\` using \`${separator}\` as a separator`, key);
|
|
30
|
+
if (transform === 'camelize') {
|
|
31
|
+
key = camelize(key);
|
|
32
|
+
} else if (transform === 'underscore') {
|
|
33
|
+
key = underscore(key);
|
|
34
|
+
}
|
|
35
|
+
return [{
|
|
36
|
+
property: key,
|
|
37
|
+
direction: direction === 'asc' ? SortDirection.Ascending : SortDirection.Descending
|
|
38
|
+
}];
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @example
|
|
43
|
+
*
|
|
44
|
+
* ```ts
|
|
45
|
+
* serializeSorts([{ property: 'firstName', direction: 'ascending' }],{ separator: '.', transform: 'camelize' });
|
|
46
|
+
* // => 'first_name.asc'
|
|
47
|
+
*
|
|
48
|
+
* serializeSorts([{ property: 'lastName', direction: 'descending' }],{ separator: '.', transform: 'camelize' });
|
|
49
|
+
* // => 'last_name.desc'
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
function serializeSorts(sorts, options = {
|
|
53
|
+
separator: '.',
|
|
54
|
+
transform: 'underscore'
|
|
55
|
+
}) {
|
|
56
|
+
const {
|
|
57
|
+
transform,
|
|
58
|
+
separator
|
|
59
|
+
} = options;
|
|
60
|
+
const sortParameters = sorts.map(({
|
|
61
|
+
direction,
|
|
62
|
+
property
|
|
63
|
+
}) => {
|
|
64
|
+
const shortDirection = direction === 'ascending' ? 'asc' : 'desc';
|
|
65
|
+
let sortField = property;
|
|
66
|
+
if (transform === 'underscore') {
|
|
67
|
+
sortField = underscore(property);
|
|
68
|
+
} else if (transform === 'camelize') {
|
|
69
|
+
sortField = camelize(property);
|
|
70
|
+
}
|
|
71
|
+
return `${sortField}${separator}${shortDirection}`;
|
|
72
|
+
});
|
|
73
|
+
return sortParameters.join('+');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export { deserializeSorts, serializeSorts };
|
|
77
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../src/utils.ts"],"sourcesContent":["import { assert } from '@ember/debug';\nimport { camelize, underscore } from '@ember/string';\n\nimport { SortDirection } from './plugins/data-sorting/types.ts';\n\nimport type { Sort, SortsOptions } from './plugins/data-sorting/types.ts';\n\n/**\n * @example\n *\n * ```ts\n * deserializeSorts('first_name.asc', { separator: '.', transform: 'camelize' });\n * // => [{ property: 'firstName', direction: 'ascending' }]\n *\n * deserializeSorts('last_name.desc', { separator: '.', transform: 'camelize' });\n * // => [{ property: 'lastName', direction: 'descending' }]\n * ```\n */\n\nexport const deserializeSorts = (\n sortString: string,\n options: SortsOptions = { separator: '.', transform: 'camelize' },\n): Sort[] => {\n if (!sortString) {\n return [];\n }\n\n const { transform, separator } = options;\n let [key, direction] = sortString.split(separator);\n\n assert(\n `No key found for input: \\`${sortString}\\` using \\`${separator}\\` as a separator`,\n key,\n );\n\n if (transform === 'camelize') {\n key = camelize(key);\n } else if (transform === 'underscore') {\n key = underscore(key);\n }\n\n return [\n {\n property: key,\n direction:\n direction === 'asc'\n ? SortDirection.Ascending\n : SortDirection.Descending,\n },\n ];\n};\n\n/**\n * @example\n *\n * ```ts\n * serializeSorts([{ property: 'firstName', direction: 'ascending' }],{ separator: '.', transform: 'camelize' });\n * // => 'first_name.asc'\n *\n * serializeSorts([{ property: 'lastName', direction: 'descending' }],{ separator: '.', transform: 'camelize' });\n * // => 'last_name.desc'\n * ```\n */\nexport function serializeSorts(\n sorts: Sort[],\n options: SortsOptions = { separator: '.', transform: 'underscore' },\n): string {\n const { transform, separator } = options;\n\n const sortParameters = sorts.map(({ direction, property }) => {\n const shortDirection = direction === 'ascending' ? 'asc' : 'desc';\n\n let sortField = property;\n\n if (transform === 'underscore') {\n sortField = underscore(property);\n } else if (transform === 'camelize') {\n sortField = camelize(property);\n }\n\n return `${sortField}${separator}${shortDirection}`;\n });\n\n return sortParameters.join('+');\n}\n"],"names":["deserializeSorts","sortString","options","separator","transform","key","direction","split","assert","camelize","underscore","property","SortDirection","Ascending","Descending","serializeSorts","sorts","sortParameters","map","shortDirection","sortField","join"],"mappings":";;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;MAEaA,gBAAgB,GAAGA,CAC9BC,UAAkB,EAClBC,OAAqB,GAAG;AAAEC,EAAAA,SAAS,EAAE,GAAG;AAAEC,EAAAA,SAAS,EAAE;AAAW,CAAC,KACtD;EACX,IAAI,CAACH,UAAU,EAAE;AACf,IAAA,OAAO,EAAE;AACX;EAEA,MAAM;IAAEG,SAAS;AAAED,IAAAA;AAAU,GAAC,GAAGD,OAAO;EACxC,IAAI,CAACG,GAAG,EAAEC,SAAS,CAAC,GAAGL,UAAU,CAACM,KAAK,CAACJ,SAAS,CAAC;EAElDK,MAAM,CACJ,6BAA6BP,UAAU,CAAA,WAAA,EAAcE,SAAS,CAAmB,iBAAA,CAAA,EACjFE,GACF,CAAC;EAED,IAAID,SAAS,KAAK,UAAU,EAAE;AAC5BC,IAAAA,GAAG,GAAGI,QAAQ,CAACJ,GAAG,CAAC;AACrB,GAAC,MAAM,IAAID,SAAS,KAAK,YAAY,EAAE;AACrCC,IAAAA,GAAG,GAAGK,UAAU,CAACL,GAAG,CAAC;AACvB;AAEA,EAAA,OAAO,CACL;AACEM,IAAAA,QAAQ,EAAEN,GAAG;IACbC,SAAS,EACPA,SAAS,KAAK,KAAK,GACfM,aAAa,CAACC,SAAS,GACvBD,aAAa,CAACE;AACtB,GAAC,CACF;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,cAAcA,CAC5BC,KAAa,EACbd,OAAqB,GAAG;AAAEC,EAAAA,SAAS,EAAE,GAAG;AAAEC,EAAAA,SAAS,EAAE;AAAa,CAAC,EAC3D;EACR,MAAM;IAAEA,SAAS;AAAED,IAAAA;AAAU,GAAC,GAAGD,OAAO;AAExC,EAAA,MAAMe,cAAc,GAAGD,KAAK,CAACE,GAAG,CAAC,CAAC;IAAEZ,SAAS;AAAEK,IAAAA;AAAS,GAAC,KAAK;IAC5D,MAAMQ,cAAc,GAAGb,SAAS,KAAK,WAAW,GAAG,KAAK,GAAG,MAAM;IAEjE,IAAIc,SAAS,GAAGT,QAAQ;IAExB,IAAIP,SAAS,KAAK,YAAY,EAAE;AAC9BgB,MAAAA,SAAS,GAAGV,UAAU,CAACC,QAAQ,CAAC;AAClC,KAAC,MAAM,IAAIP,SAAS,KAAK,UAAU,EAAE;AACnCgB,MAAAA,SAAS,GAAGX,QAAQ,CAACE,QAAQ,CAAC;AAChC;AAEA,IAAA,OAAO,GAAGS,SAAS,CAAA,EAAGjB,SAAS,CAAA,EAAGgB,cAAc,CAAE,CAAA;AACpD,GAAC,CAAC;AAEF,EAAA,OAAOF,cAAc,CAACI,IAAI,CAAC,GAAG,CAAC;AACjC;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@universal-ember/table",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "An implementation of table behaviors for driving any table or table-like UI -- all without a UI (headless)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ember-addon",
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
"author": "NullVoxPopuli",
|
|
14
14
|
"files": [
|
|
15
15
|
"addon-main.js",
|
|
16
|
-
"dist"
|
|
16
|
+
"dist",
|
|
17
|
+
"src"
|
|
17
18
|
],
|
|
18
19
|
"exports": {
|
|
19
20
|
".": {
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { expectTypeOf } from 'expect-type';
|
|
2
|
+
|
|
3
|
+
import { BasePlugin } from '../../plugins/index.ts';
|
|
4
|
+
|
|
5
|
+
import type { Table } from '../../index.ts';
|
|
6
|
+
|
|
7
|
+
class TableMeta {
|
|
8
|
+
a = 'a';
|
|
9
|
+
}
|
|
10
|
+
class ColumnMeta {
|
|
11
|
+
b = 'b';
|
|
12
|
+
}
|
|
13
|
+
class RowMeta {
|
|
14
|
+
c = 'c';
|
|
15
|
+
}
|
|
16
|
+
class A extends BasePlugin<{
|
|
17
|
+
Meta: { Table: TableMeta; Column: ColumnMeta; Row: RowMeta };
|
|
18
|
+
}> {
|
|
19
|
+
name = 'a plugin';
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const x = 0 as unknown as Table;
|
|
23
|
+
const a = new A(x);
|
|
24
|
+
|
|
25
|
+
///////////////////////////////////////////////////
|
|
26
|
+
// Meta instantiation
|
|
27
|
+
///////////////////////////////////////////////////
|
|
28
|
+
if (a.meta?.table) {
|
|
29
|
+
expectTypeOf(new a.meta.table()).toEqualTypeOf<TableMeta>();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (a.meta?.column) {
|
|
33
|
+
expectTypeOf(new a.meta.column()).toEqualTypeOf<ColumnMeta>();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (a.meta?.row) {
|
|
37
|
+
expectTypeOf(new a.meta.row()).toEqualTypeOf<RowMeta>();
|
|
38
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { DataSorting } from '../../plugins/data-sorting/index.ts';
|
|
2
|
+
import { RowSelection } from '../../plugins/row-selection/index.ts';
|
|
3
|
+
|
|
4
|
+
import type { SortItem } from '../../plugins/data-sorting';
|
|
5
|
+
|
|
6
|
+
RowSelection.with(() => {
|
|
7
|
+
const simpleOptions = {
|
|
8
|
+
selection: new Set<number>(),
|
|
9
|
+
onSelect: (item: number) => console.debug(item),
|
|
10
|
+
onDeselect: (item: number) => console.debug(item),
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
return simpleOptions;
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
DataSorting.with(() => {
|
|
17
|
+
const simpleOptions = {
|
|
18
|
+
onSort: (sorts: SortItem<number>[]) => console.debug(sorts),
|
|
19
|
+
sorts: [] as unknown as SortItem<number>[],
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
return simpleOptions;
|
|
23
|
+
});
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { BasePlugin, meta, options, preferences } from '../../plugins/index.ts';
|
|
2
|
+
import { expectTypeOf } from 'expect-type';
|
|
3
|
+
|
|
4
|
+
import type { Column, Table } from '../../index.ts';
|
|
5
|
+
|
|
6
|
+
// This value is irrelevant for the tests it's used in
|
|
7
|
+
const x = 0 as unknown as Table<unknown>;
|
|
8
|
+
const y = 0 as unknown as Column<unknown>;
|
|
9
|
+
|
|
10
|
+
//////////////////////////////////////////////
|
|
11
|
+
// A SimplePlugin
|
|
12
|
+
//////////////////////////////////////////////
|
|
13
|
+
class ATableMeta {
|
|
14
|
+
isEnabled = true;
|
|
15
|
+
}
|
|
16
|
+
class AColumnMeta {
|
|
17
|
+
isPinned = 1;
|
|
18
|
+
}
|
|
19
|
+
class ARowMeta {
|
|
20
|
+
isARow = true;
|
|
21
|
+
}
|
|
22
|
+
interface AOptions {
|
|
23
|
+
enabled?: boolean;
|
|
24
|
+
}
|
|
25
|
+
interface AColumnOptions {
|
|
26
|
+
isPinned?: boolean;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface SignatureA {
|
|
30
|
+
Meta: {
|
|
31
|
+
Table: ATableMeta;
|
|
32
|
+
Column: AColumnMeta;
|
|
33
|
+
Row: ARowMeta;
|
|
34
|
+
};
|
|
35
|
+
Options: {
|
|
36
|
+
Plugin: AOptions;
|
|
37
|
+
Column: AColumnOptions;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
class SimplePlugin<Signature = SignatureA> extends BasePlugin<Signature> {
|
|
42
|
+
name = 'my-test-plugin';
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Options
|
|
46
|
+
expectTypeOf(options.forTable(x, SimplePlugin)).toEqualTypeOf<AOptions>();
|
|
47
|
+
expectTypeOf(
|
|
48
|
+
options.forColumn(y, SimplePlugin),
|
|
49
|
+
).toEqualTypeOf<AColumnOptions>();
|
|
50
|
+
|
|
51
|
+
// Meta
|
|
52
|
+
expectTypeOf(meta.forTable(x, SimplePlugin)).toEqualTypeOf<ATableMeta>();
|
|
53
|
+
expectTypeOf(meta.forColumn(y, SimplePlugin)).toEqualTypeOf<AColumnMeta>();
|
|
54
|
+
|
|
55
|
+
// Preferences
|
|
56
|
+
interface MapLite {
|
|
57
|
+
get(key: string): unknown;
|
|
58
|
+
set(key: string, value: unknown): void | undefined;
|
|
59
|
+
delete(key: string): void | undefined;
|
|
60
|
+
}
|
|
61
|
+
expectTypeOf(preferences.forTable(x, SimplePlugin)).toEqualTypeOf<MapLite>();
|
|
62
|
+
expectTypeOf(preferences.forColumn(y, SimplePlugin)).toEqualTypeOf<MapLite>();
|
|
63
|
+
|
|
64
|
+
//////////////////////////////////////////////
|
|
65
|
+
// A Real plugin
|
|
66
|
+
//////////////////////////////////////////////
|
|
67
|
+
|
|
68
|
+
import { DataSorting } from '../../plugins/data-sorting/index.ts';
|
|
69
|
+
|
|
70
|
+
import type { Signature as DataSortingSignature } from '../../plugins/data-sorting/index.ts';
|
|
71
|
+
|
|
72
|
+
// Options
|
|
73
|
+
expectTypeOf(options.forTable(x, DataSorting)).toEqualTypeOf<
|
|
74
|
+
DataSortingSignature['Options']['Plugin']
|
|
75
|
+
>();
|
|
76
|
+
expectTypeOf(options.forColumn(y, DataSorting)).toEqualTypeOf<
|
|
77
|
+
DataSortingSignature['Options']['Column']
|
|
78
|
+
>();
|
|
79
|
+
|
|
80
|
+
// Meta
|
|
81
|
+
expectTypeOf(meta.forTable(x, DataSorting)).toEqualTypeOf<
|
|
82
|
+
DataSortingSignature['Meta']['Table']
|
|
83
|
+
>();
|
|
84
|
+
expectTypeOf(meta.forColumn(y, DataSorting)).toEqualTypeOf<
|
|
85
|
+
DataSortingSignature['Meta']['Column']
|
|
86
|
+
>();
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { expectTypeOf } from 'expect-type';
|
|
2
|
+
|
|
3
|
+
import { BasePlugin } from '../../plugins/index.ts';
|
|
4
|
+
|
|
5
|
+
import type { SignatureFrom } from '../../plugins/-private/base.ts';
|
|
6
|
+
|
|
7
|
+
class ATableMeta {
|
|
8
|
+
a = 1;
|
|
9
|
+
}
|
|
10
|
+
class AColumnMeta {
|
|
11
|
+
ac = 1;
|
|
12
|
+
}
|
|
13
|
+
class ARowMeta {
|
|
14
|
+
ar = 1;
|
|
15
|
+
}
|
|
16
|
+
class AOptions {
|
|
17
|
+
ao = 1;
|
|
18
|
+
}
|
|
19
|
+
class AColumnOptions {
|
|
20
|
+
aco = 1;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface SignatureA {
|
|
24
|
+
Meta: {
|
|
25
|
+
Table: ATableMeta;
|
|
26
|
+
Column: AColumnMeta;
|
|
27
|
+
Row: ARowMeta;
|
|
28
|
+
};
|
|
29
|
+
Options: {
|
|
30
|
+
Plugin: AOptions;
|
|
31
|
+
Column: AColumnOptions;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
class PluginA<Signature = SignatureA> extends BasePlugin<Signature> {
|
|
36
|
+
name = 'my-test-plugin';
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Test the tests
|
|
40
|
+
expectTypeOf<SignatureA>().toEqualTypeOf<SignatureA>();
|
|
41
|
+
|
|
42
|
+
// Tests that we can pluck the generic off of BasePlugin
|
|
43
|
+
expectTypeOf<
|
|
44
|
+
SignatureFrom<BasePlugin<SignatureA>>
|
|
45
|
+
>().toEqualTypeOf<SignatureA>();
|
|
46
|
+
|
|
47
|
+
// Tests that we can get the generic type off of a sub-type of BasePlugin
|
|
48
|
+
expectTypeOf<SignatureFrom<PluginA>>().toEqualTypeOf<SignatureA>();
|
|
49
|
+
|
|
50
|
+
// Tests that we can get the generic off of a sub-type passed to BasePlugin
|
|
51
|
+
class PluginC extends BasePlugin<SignatureA> {
|
|
52
|
+
name = 'plugin-c';
|
|
53
|
+
}
|
|
54
|
+
expectTypeOf<SignatureFrom<PluginC>>().toEqualTypeOf<SignatureA>();
|
|
55
|
+
|
|
56
|
+
///////////////////////////////////////////
|
|
57
|
+
|
|
58
|
+
class PluginB extends BasePlugin<{ Meta: { Table: ATableMeta } }> {
|
|
59
|
+
name = 'plugin-b';
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
expectTypeOf<SignatureFrom<PluginB>>().toEqualTypeOf<{
|
|
63
|
+
Meta: {
|
|
64
|
+
Table: ATableMeta;
|
|
65
|
+
};
|
|
66
|
+
}>();
|