@universal-ember/table 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/dist/-private/-type-tests/plugin-properties.test.js +27 -0
  2. package/dist/-private/-type-tests/plugin-properties.test.js.map +1 -0
  3. package/dist/-private/-type-tests/plugin-with.test.js +20 -0
  4. package/dist/-private/-type-tests/plugin-with.test.js.map +1 -0
  5. package/dist/-private/-type-tests/plugins-accessors.test.js +36 -0
  6. package/dist/-private/-type-tests/plugins-accessors.test.js.map +1 -0
  7. package/dist/-private/-type-tests/plugins-signature-from.test.js +15 -0
  8. package/dist/-private/-type-tests/plugins-signature-from.test.js.map +1 -0
  9. package/dist/-private/-type-tests/plugins-signature-utils.test.js +36 -0
  10. package/dist/-private/-type-tests/plugins-signature-utils.test.js.map +1 -0
  11. package/dist/-private/-type-tests/table-api.test.js +17 -0
  12. package/dist/-private/-type-tests/table-api.test.js.map +1 -0
  13. package/dist/-private/-type-tests/table-config.test.js +55 -0
  14. package/dist/-private/-type-tests/table-config.test.js.map +1 -0
  15. package/dist/-private/column.js +62 -0
  16. package/dist/-private/column.js.map +1 -0
  17. package/dist/-private/ember-compat.js +17 -0
  18. package/dist/-private/ember-compat.js.map +1 -0
  19. package/dist/-private/interfaces/column.js +2 -0
  20. package/dist/-private/interfaces/column.js.map +1 -0
  21. package/dist/-private/interfaces/index.js +2 -0
  22. package/dist/-private/interfaces/index.js.map +1 -0
  23. package/dist/-private/interfaces/modifier.js +2 -0
  24. package/dist/-private/interfaces/modifier.js.map +1 -0
  25. package/dist/-private/interfaces/pagination.js +2 -0
  26. package/dist/-private/interfaces/pagination.js.map +1 -0
  27. package/dist/-private/interfaces/plugins.js +2 -0
  28. package/dist/-private/interfaces/plugins.js.map +1 -0
  29. package/dist/-private/interfaces/preferences.js +2 -0
  30. package/dist/-private/interfaces/preferences.js.map +1 -0
  31. package/dist/-private/interfaces/selection.js +2 -0
  32. package/dist/-private/interfaces/selection.js.map +1 -0
  33. package/dist/-private/interfaces/table.js +2 -0
  34. package/dist/-private/interfaces/table.js.map +1 -0
  35. package/dist/-private/js-helper.js +55 -0
  36. package/dist/-private/js-helper.js.map +1 -0
  37. package/dist/-private/preferences.js +143 -0
  38. package/dist/-private/preferences.js.map +1 -0
  39. package/dist/-private/private-types.js +2 -0
  40. package/dist/-private/private-types.js.map +1 -0
  41. package/dist/-private/row.js +51 -0
  42. package/dist/-private/row.js.map +1 -0
  43. package/dist/-private/table.js +273 -0
  44. package/dist/-private/table.js.map +1 -0
  45. package/dist/-private/utils.js +15 -0
  46. package/dist/-private/utils.js.map +1 -0
  47. package/dist/_rollupPluginBabelHelpers-BpiaYhlf.js +63 -0
  48. package/dist/_rollupPluginBabelHelpers-BpiaYhlf.js.map +1 -0
  49. package/dist/index.js +4 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/plugins/-private/base.js +524 -0
  52. package/dist/plugins/-private/base.js.map +1 -0
  53. package/dist/plugins/-private/utils.js +103 -0
  54. package/dist/plugins/-private/utils.js.map +1 -0
  55. package/dist/plugins/column-reordering/helpers.js +44 -0
  56. package/dist/plugins/column-reordering/helpers.js.map +1 -0
  57. package/dist/plugins/column-reordering/index.js +3 -0
  58. package/dist/plugins/column-reordering/index.js.map +1 -0
  59. package/dist/plugins/column-reordering/plugin.js +359 -0
  60. package/dist/plugins/column-reordering/plugin.js.map +1 -0
  61. package/dist/plugins/column-reordering/utils.js +34 -0
  62. package/dist/plugins/column-reordering/utils.js.map +1 -0
  63. package/dist/plugins/column-resizing/handle.js +241 -0
  64. package/dist/plugins/column-resizing/handle.js.map +1 -0
  65. package/dist/plugins/column-resizing/helpers.js +71 -0
  66. package/dist/plugins/column-resizing/helpers.js.map +1 -0
  67. package/dist/plugins/column-resizing/index.js +4 -0
  68. package/dist/plugins/column-resizing/index.js.map +1 -0
  69. package/dist/plugins/column-resizing/plugin.js +328 -0
  70. package/dist/plugins/column-resizing/plugin.js.map +1 -0
  71. package/dist/plugins/column-resizing/resize-observer.js +44 -0
  72. package/dist/plugins/column-resizing/resize-observer.js.map +1 -0
  73. package/dist/plugins/column-resizing/utils.js +44 -0
  74. package/dist/plugins/column-resizing/utils.js.map +1 -0
  75. package/dist/plugins/column-visibility/helpers.js +25 -0
  76. package/dist/plugins/column-visibility/helpers.js.map +1 -0
  77. package/dist/plugins/column-visibility/index.js +3 -0
  78. package/dist/plugins/column-visibility/index.js.map +1 -0
  79. package/dist/plugins/column-visibility/plugin.js +92 -0
  80. package/dist/plugins/column-visibility/plugin.js.map +1 -0
  81. package/dist/plugins/data-sorting/helpers.js +49 -0
  82. package/dist/plugins/data-sorting/helpers.js.map +1 -0
  83. package/dist/plugins/data-sorting/index.js +4 -0
  84. package/dist/plugins/data-sorting/index.js.map +1 -0
  85. package/dist/plugins/data-sorting/plugin.js +132 -0
  86. package/dist/plugins/data-sorting/plugin.js.map +1 -0
  87. package/dist/plugins/data-sorting/types.js +14 -0
  88. package/dist/plugins/data-sorting/types.js.map +1 -0
  89. package/dist/plugins/index.js +3 -0
  90. package/dist/plugins/index.js.map +1 -0
  91. package/dist/plugins/metadata/helpers.js +12 -0
  92. package/dist/plugins/metadata/helpers.js.map +1 -0
  93. package/dist/plugins/metadata/index.js +3 -0
  94. package/dist/plugins/metadata/index.js.map +1 -0
  95. package/dist/plugins/metadata/plugin.js +25 -0
  96. package/dist/plugins/metadata/plugin.js.map +1 -0
  97. package/dist/plugins/row-selection/helpers.js +10 -0
  98. package/dist/plugins/row-selection/helpers.js.map +1 -0
  99. package/dist/plugins/row-selection/index.js +3 -0
  100. package/dist/plugins/row-selection/index.js.map +1 -0
  101. package/dist/plugins/row-selection/plugin.js +118 -0
  102. package/dist/plugins/row-selection/plugin.js.map +1 -0
  103. package/dist/plugins/sticky-columns/helpers.js +49 -0
  104. package/dist/plugins/sticky-columns/helpers.js.map +1 -0
  105. package/dist/plugins/sticky-columns/index.js +3 -0
  106. package/dist/plugins/sticky-columns/index.js.map +1 -0
  107. package/dist/plugins/sticky-columns/plugin.js +139 -0
  108. package/dist/plugins/sticky-columns/plugin.js.map +1 -0
  109. package/dist/test-support/index.js +62 -0
  110. package/dist/test-support/index.js.map +1 -0
  111. package/dist/utils.js +77 -0
  112. package/dist/utils.js.map +1 -0
  113. package/package.json +4 -3
  114. package/src/-private/-type-tests/plugin-properties.test.ts +38 -0
  115. package/src/-private/-type-tests/plugin-with.test.ts +23 -0
  116. package/src/-private/-type-tests/plugins-accessors.test.ts +86 -0
  117. package/src/-private/-type-tests/plugins-signature-from.test.ts +66 -0
  118. package/src/-private/-type-tests/plugins-signature-utils.test.ts +154 -0
  119. package/src/-private/-type-tests/table-api.test.ts +20 -0
  120. package/src/-private/-type-tests/table-config.test.ts +70 -0
  121. package/src/-private/column.ts +67 -0
  122. package/src/-private/ember-compat.ts +26 -0
  123. package/src/-private/interfaces/column.ts +73 -0
  124. package/src/-private/interfaces/index.ts +7 -0
  125. package/src/-private/interfaces/modifier.ts +7 -0
  126. package/src/-private/interfaces/pagination.ts +13 -0
  127. package/src/-private/interfaces/plugins.ts +349 -0
  128. package/src/-private/interfaces/preferences.ts +82 -0
  129. package/src/-private/interfaces/selection.ts +38 -0
  130. package/src/-private/interfaces/table.ts +121 -0
  131. package/src/-private/js-helper.ts +65 -0
  132. package/src/-private/preferences.ts +176 -0
  133. package/src/-private/private-types.ts +8 -0
  134. package/src/-private/row.ts +66 -0
  135. package/src/-private/table.ts +310 -0
  136. package/src/-private/utils.ts +21 -0
  137. package/src/index.ts +25 -0
  138. package/src/plugins/-private/base.ts +836 -0
  139. package/src/plugins/-private/utils.ts +166 -0
  140. package/src/plugins/column-reordering/helpers.ts +50 -0
  141. package/src/plugins/column-reordering/index.ts +6 -0
  142. package/src/plugins/column-reordering/plugin.ts +489 -0
  143. package/src/plugins/column-reordering/utils.ts +48 -0
  144. package/src/plugins/column-resizing/handle.ts +280 -0
  145. package/src/plugins/column-resizing/helpers.ts +79 -0
  146. package/src/plugins/column-resizing/index.ts +7 -0
  147. package/src/plugins/column-resizing/plugin.ts +490 -0
  148. package/src/plugins/column-resizing/resize-observer.ts +48 -0
  149. package/src/plugins/column-resizing/utils.ts +54 -0
  150. package/src/plugins/column-visibility/helpers.ts +28 -0
  151. package/src/plugins/column-visibility/index.ts +6 -0
  152. package/src/plugins/column-visibility/plugin.ts +155 -0
  153. package/src/plugins/data-sorting/helpers.ts +56 -0
  154. package/src/plugins/data-sorting/index.ts +8 -0
  155. package/src/plugins/data-sorting/plugin.ts +222 -0
  156. package/src/plugins/data-sorting/types.ts +26 -0
  157. package/src/plugins/index.ts +20 -0
  158. package/src/plugins/metadata/helpers.ts +12 -0
  159. package/src/plugins/metadata/index.ts +7 -0
  160. package/src/plugins/metadata/plugin.ts +26 -0
  161. package/src/plugins/row-selection/helpers.ts +13 -0
  162. package/src/plugins/row-selection/index.ts +7 -0
  163. package/src/plugins/row-selection/plugin.ts +218 -0
  164. package/src/plugins/sticky-columns/helpers.ts +59 -0
  165. package/src/plugins/sticky-columns/index.ts +7 -0
  166. package/src/plugins/sticky-columns/plugin.ts +201 -0
  167. package/src/test-support/index.ts +76 -0
  168. package/src/utils.ts +85 -0
@@ -0,0 +1,103 @@
1
+ import { assert } from '@ember/debug';
2
+
3
+ function normalizePluginsConfig(plugins) {
4
+ if (!plugins) return [];
5
+ const result = [];
6
+ for (const plugin of plugins) {
7
+ if (!Array.isArray(plugin)) {
8
+ result.push([plugin, () => ({})]);
9
+ continue;
10
+ }
11
+ if (plugin.length === 2) {
12
+ result.push([plugin[0], plugin[1]]);
13
+ continue;
14
+ }
15
+ result.push([plugin[0], () => ({})]);
16
+ }
17
+ assert(`Every entry in the plugins config must be invokable`, result.every(tuple => typeof tuple[0] === 'function' && typeof tuple[1] === 'function'));
18
+ return result;
19
+ }
20
+
21
+ /**
22
+ * Creates a map of featureName => [plugins providing said feature name]
23
+ */
24
+ function collectFeatures(plugins) {
25
+ const result = {};
26
+ for (const [plugin] of plugins) {
27
+ if ('features' in plugin) {
28
+ for (const feature of plugin.features || []) {
29
+ result[feature] = [...(result[feature] || []), plugin];
30
+ }
31
+ }
32
+ }
33
+ return result;
34
+ }
35
+
36
+ /**
37
+ * Creates a map of requirement => [plugins requesting the feature / requirement]
38
+ */
39
+ function collectRequirements(plugins) {
40
+ const result = {};
41
+ for (const [plugin] of plugins) {
42
+ if ('requires' in plugin) {
43
+ for (const requirement of plugin.requires || []) {
44
+ result[requirement] = [...(result[requirement] || []), plugin];
45
+ }
46
+ }
47
+ }
48
+ return result;
49
+ }
50
+ function verifyPlugins(plugins) {
51
+ const features = collectFeatures(plugins);
52
+ const requirements = collectRequirements(plugins);
53
+ const allFeatures = Object.keys(features);
54
+ const errors = [];
55
+
56
+ // Only one plugin can provide each feature
57
+ for (const [feature, providingPlugins] of Object.entries(features)) {
58
+ if (providingPlugins.length > 1) {
59
+ errors.push(`More than one plugin is providing the feature: ${feature}. ` + `Please remove one of ${providingPlugins.map(p => p.name).join(', ')}`);
60
+ }
61
+ }
62
+ for (const [requirement, requestingPlugins] of Object.entries(requirements)) {
63
+ if (!allFeatures.includes(requirement)) {
64
+ errors.push(`Configuration is missing requirement: ${requirement}, ` + `And is requested by ${requestingPlugins.map(p => p.name).join(', ')}. ` + `Please add a plugin with the ${requirement} feature`);
65
+ }
66
+ }
67
+ if (errors.length > 0) {
68
+ throw new Error(errors.join('\n'));
69
+ }
70
+ }
71
+ /**
72
+ * @public
73
+ *
74
+ * Utility that helps safely apply styles to an element
75
+ */
76
+ function applyStyles(element, styles) {
77
+ for (const [name, value] of Object.entries(styles)) {
78
+ if (name in element.style) {
79
+ assignStyle(element, name, value);
80
+ }
81
+ }
82
+ }
83
+ function assignStyle(element, styleName, value) {
84
+ element.style[styleName] = value;
85
+ }
86
+ function removeStyle(element, styleName) {
87
+ element.style.removeProperty(styleName);
88
+ }
89
+
90
+ /**
91
+ * @public
92
+ *
93
+ * Utility that helps safely remove styles from an element
94
+ */
95
+ function removeStyles(element, styles) {
96
+ for (const name of styles) {
97
+ if (typeof name !== 'string') continue;
98
+ removeStyle(element, name);
99
+ }
100
+ }
101
+
102
+ export { applyStyles, normalizePluginsConfig, removeStyles, verifyPlugins };
103
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../src/plugins/-private/utils.ts"],"sourcesContent":["import { assert } from '@ember/debug';\n\nimport type { BasePlugin } from './base';\nimport type { Constructor } from '../../-private/private-types';\nimport type { Plugin } from '../../plugins';\n\ntype PluginOption =\n | Constructor<Plugin<any>>\n | [Constructor<Plugin<any>>, () => any];\n\ntype ExpandedPluginOption = [Constructor<Plugin<any>>, () => any];\n\nexport type Plugins = PluginOption[];\n\nexport function normalizePluginsConfig(\n plugins?: Plugins,\n): ExpandedPluginOption[] {\n if (!plugins) return [];\n\n const result: ExpandedPluginOption[] = [];\n\n for (const plugin of plugins) {\n if (!Array.isArray(plugin)) {\n result.push([plugin, () => ({})]);\n\n continue;\n }\n\n if (plugin.length === 2) {\n result.push([plugin[0], plugin[1]]);\n\n continue;\n }\n\n result.push([plugin[0], () => ({})]);\n }\n\n assert(\n `Every entry in the plugins config must be invokable`,\n result.every(\n (tuple) =>\n typeof tuple[0] === 'function' && typeof tuple[1] === 'function',\n ),\n );\n\n return result;\n}\n\n/**\n * Creates a map of featureName => [plugins providing said feature name]\n */\nfunction collectFeatures(plugins: ExpandedPluginOption[]) {\n const result: Record<string, { name: string }[]> = {};\n\n for (const [plugin] of plugins) {\n if ('features' in plugin) {\n for (const feature of (plugin as unknown as typeof BasePlugin).features ||\n []) {\n result[feature] = [...(result[feature] || []), plugin];\n }\n }\n }\n\n return result;\n}\n\n/**\n * Creates a map of requirement => [plugins requesting the feature / requirement]\n */\nfunction collectRequirements(plugins: ExpandedPluginOption[]) {\n const result: Record<string, { name: string }[]> = {};\n\n for (const [plugin] of plugins) {\n if ('requires' in plugin) {\n for (const requirement of (plugin as unknown as typeof BasePlugin)\n .requires || []) {\n result[requirement] = [...(result[requirement] || []), plugin];\n }\n }\n }\n\n return result;\n}\n\nexport function verifyPlugins(plugins: ExpandedPluginOption[]) {\n const features = collectFeatures(plugins);\n const requirements = collectRequirements(plugins);\n const allFeatures = Object.keys(features);\n const errors: string[] = [];\n\n // Only one plugin can provide each feature\n for (const [feature, providingPlugins] of Object.entries(features)) {\n if (providingPlugins.length > 1) {\n errors.push(\n `More than one plugin is providing the feature: ${feature}. ` +\n `Please remove one of ${providingPlugins.map((p) => p.name).join(', ')}`,\n );\n }\n }\n\n for (const [requirement, requestingPlugins] of Object.entries(requirements)) {\n if (!allFeatures.includes(requirement)) {\n errors.push(\n `Configuration is missing requirement: ${requirement}, ` +\n `And is requested by ${requestingPlugins.map((p) => p.name).join(', ')}. ` +\n `Please add a plugin with the ${requirement} feature`,\n );\n }\n }\n\n if (errors.length > 0) {\n throw new Error(errors.join('\\n'));\n }\n}\n\ntype AssignableStyles = Omit<CSSStyleDeclaration, 'length' | 'parentRule'>;\n\n/**\n * @public\n *\n * Utility that helps safely apply styles to an element\n */\nexport function applyStyles(\n element: HTMLElement | SVGElement,\n styles: Partial<AssignableStyles>,\n) {\n for (const [name, value] of Object.entries(styles)) {\n if (name in element.style) {\n assignStyle(\n element,\n name as keyof CSSStyleDeclaration,\n value as CSSStyleDeclaration[keyof CSSStyleDeclaration],\n );\n }\n }\n}\n\ntype StyleDeclarationFor<MaybeStyle> =\n MaybeStyle extends keyof CSSStyleDeclaration ? MaybeStyle : never;\n\nfunction assignStyle<StyleName>(\n element: HTMLElement | SVGElement,\n styleName: StyleDeclarationFor<StyleName>,\n value: CSSStyleDeclaration[StyleDeclarationFor<StyleName>],\n) {\n element.style[styleName] = value;\n}\n\nfunction removeStyle(element: HTMLElement | SVGElement, styleName: string) {\n element.style.removeProperty(styleName);\n}\n\n/**\n * @public\n *\n * Utility that helps safely remove styles from an element\n */\nexport function removeStyles(\n element: HTMLElement | SVGElement,\n styles: Array<keyof AssignableStyles>,\n) {\n for (const name of styles) {\n if (typeof name !== 'string') continue;\n removeStyle(element, name);\n }\n}\n"],"names":["normalizePluginsConfig","plugins","result","plugin","Array","isArray","push","length","assert","every","tuple","collectFeatures","feature","features","collectRequirements","requirement","requires","verifyPlugins","requirements","allFeatures","Object","keys","errors","providingPlugins","entries","map","p","name","join","requestingPlugins","includes","Error","applyStyles","element","styles","value","style","assignStyle","styleName","removeStyle","removeProperty","removeStyles"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { meta } from '../-private/base.js';
2
+ import { ColumnReordering } from './plugin.js';
3
+
4
+ /**
5
+ * Move the column one position to the left.
6
+ * If the column is first, nothing will happen.
7
+ */
8
+ const moveLeft = column => meta.forColumn(column, ColumnReordering).moveLeft();
9
+
10
+ /**
11
+ * Move the column one position to the right.
12
+ * If the column is last, nothing will happen.
13
+ */
14
+ const moveRight = column => meta.forColumn(column, ColumnReordering).moveRight();
15
+
16
+ /**
17
+ * Override all column positions at once.
18
+ */
19
+ const setColumnOrder = (table, order) => {
20
+ return meta.forTable(table, ColumnReordering).setOrder(order);
21
+ };
22
+
23
+ /**
24
+ * Ask if the column cannot move to the left
25
+ */
26
+ const cannotMoveLeft = column => meta.forColumn(column, ColumnReordering).cannotMoveLeft;
27
+
28
+ /**
29
+ * Ask if the column cannot move to the right
30
+ */
31
+ const cannotMoveRight = column => meta.forColumn(column, ColumnReordering).cannotMoveRight;
32
+
33
+ /**
34
+ * Ask if the column can move to the left
35
+ */
36
+ const canMoveLeft = column => meta.forColumn(column, ColumnReordering).cannotMoveLeft;
37
+
38
+ /**
39
+ * Ask if the column can move to the right
40
+ */
41
+ const canMoveRight = column => meta.forColumn(column, ColumnReordering).cannotMoveRight;
42
+
43
+ export { canMoveLeft, canMoveRight, cannotMoveLeft, cannotMoveRight, moveLeft, moveRight, setColumnOrder };
44
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sources":["../../../src/plugins/column-reordering/helpers.ts"],"sourcesContent":["import { meta } from '../-private/base.ts';\nimport { ColumnReordering } from './plugin.ts';\n\nimport type { ColumnOrder } from './plugin.ts';\nimport type { Column, Table } from '../../index.ts';\n\n/**\n * Move the column one position to the left.\n * If the column is first, nothing will happen.\n */\nexport const moveLeft = (column: Column) =>\n meta.forColumn(column, ColumnReordering).moveLeft();\n\n/**\n * Move the column one position to the right.\n * If the column is last, nothing will happen.\n */\nexport const moveRight = (column: Column) =>\n meta.forColumn(column, ColumnReordering).moveRight();\n\n/**\n * Override all column positions at once.\n */\nexport const setColumnOrder = (table: Table, order: ColumnOrder) => {\n return meta.forTable(table, ColumnReordering).setOrder(order);\n};\n\n/**\n * Ask if the column cannot move to the left\n */\nexport const cannotMoveLeft = (column: Column) =>\n meta.forColumn(column, ColumnReordering).cannotMoveLeft;\n\n/**\n * Ask if the column cannot move to the right\n */\nexport const cannotMoveRight = (column: Column) =>\n meta.forColumn(column, ColumnReordering).cannotMoveRight;\n\n/**\n * Ask if the column can move to the left\n */\nexport const canMoveLeft = (column: Column) =>\n meta.forColumn(column, ColumnReordering).cannotMoveLeft;\n\n/**\n * Ask if the column can move to the right\n */\nexport const canMoveRight = (column: Column) =>\n meta.forColumn(column, ColumnReordering).cannotMoveRight;\n"],"names":["moveLeft","column","meta","forColumn","ColumnReordering","moveRight","setColumnOrder","table","order","forTable","setOrder","cannotMoveLeft","cannotMoveRight","canMoveLeft","canMoveRight"],"mappings":";;;AAMA;AACA;AACA;AACA;MACaA,QAAQ,GAAIC,MAAc,IACrCC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACJ,QAAQ;;AAEnD;AACA;AACA;AACA;MACaK,SAAS,GAAIJ,MAAc,IACtCC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACC,SAAS;;AAEpD;AACA;AACA;MACaC,cAAc,GAAGA,CAACC,KAAY,EAAEC,KAAkB,KAAK;AAClE,EAAA,OAAON,IAAI,CAACO,QAAQ,CAACF,KAAK,EAAEH,gBAAgB,CAAC,CAACM,QAAQ,CAACF,KAAK,CAAC;AAC/D;;AAEA;AACA;AACA;AACaG,MAAAA,cAAc,GAAIV,MAAc,IAC3CC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACO;;AAE3C;AACA;AACA;AACaC,MAAAA,eAAe,GAAIX,MAAc,IAC5CC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACQ;;AAE3C;AACA;AACA;AACaC,MAAAA,WAAW,GAAIZ,MAAc,IACxCC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACO;;AAE3C;AACA;AACA;AACaG,MAAAA,YAAY,GAAIb,MAAc,IACzCC,IAAI,CAACC,SAAS,CAACF,MAAM,EAAEG,gBAAgB,CAAC,CAACQ;;;;"}
@@ -0,0 +1,3 @@
1
+ export { canMoveLeft, canMoveRight, cannotMoveLeft, cannotMoveRight, moveLeft, moveRight, setColumnOrder } from './helpers.js';
2
+ export { ColumnOrder, ColumnReordering, ColumnReordering as Plugin, orderOf } from './plugin.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,359 @@
1
+ import { _ as _defineProperty, a as _applyDecoratedDescriptor, b as _initializerDefineProperty, c as _classPrivateMethodInitSpec, d as _classPrivateGetter } from '../../_rollupPluginBabelHelpers-BpiaYhlf.js';
2
+ import { tracked, cached } from '@glimmer/tracking';
3
+ import { assert } from '@ember/debug';
4
+ import { action } from '@ember/object';
5
+ import { TrackedMap } from 'tracked-built-ins';
6
+ import { BasePlugin, meta, preferences, columns } from '../-private/base.js';
7
+
8
+ var _class, _descriptor, _class2;
9
+ class ColumnReordering extends BasePlugin {
10
+ constructor(...args) {
11
+ super(...args);
12
+ _defineProperty(this, "name", 'column-reordering');
13
+ _defineProperty(this, "meta", {
14
+ column: ColumnMeta,
15
+ table: TableMeta
16
+ });
17
+ }
18
+ reset() {
19
+ const tableMeta = meta.forTable(this.table, ColumnReordering);
20
+ tableMeta.reset();
21
+ }
22
+ get columns() {
23
+ return meta.forTable(this.table, ColumnReordering).columns;
24
+ }
25
+ }
26
+ _defineProperty(ColumnReordering, "features", ['columnOrder']);
27
+ var _ColumnMeta_brand = /*#__PURE__*/new WeakSet();
28
+ class ColumnMeta {
29
+ constructor(column) {
30
+ _classPrivateMethodInitSpec(this, _ColumnMeta_brand);
31
+ /**
32
+ * Move the column one spot to the left
33
+ */
34
+ _defineProperty(this, "moveLeft", () => {
35
+ _classPrivateGetter(_ColumnMeta_brand, this, _get_tableMeta).columnOrder.moveLeft(this.column.key);
36
+ });
37
+ /**
38
+ * Move the column one spot to the right
39
+ */
40
+ _defineProperty(this, "moveRight", () => {
41
+ _classPrivateGetter(_ColumnMeta_brand, this, _get_tableMeta).columnOrder.moveRight(this.column.key);
42
+ });
43
+ this.column = column;
44
+ }
45
+ get position() {
46
+ return _classPrivateGetter(_ColumnMeta_brand, this, _get_tableMeta).getPosition(this.column);
47
+ }
48
+ set position(value) {
49
+ _classPrivateGetter(_ColumnMeta_brand, this, _get_tableMeta).setPosition(this.column, value);
50
+ }
51
+ get canMoveLeft() {
52
+ return _classPrivateGetter(_ColumnMeta_brand, this, _get_tableMeta).getPosition(this.column) !== 0;
53
+ }
54
+ get canMoveRight() {
55
+ return _classPrivateGetter(_ColumnMeta_brand, this, _get_tableMeta).getPosition(this.column) !== _classPrivateGetter(_ColumnMeta_brand, this, _get_tableMeta).columns.length - 1;
56
+ }
57
+ get cannotMoveLeft() {
58
+ return !this.canMoveLeft;
59
+ }
60
+ get cannotMoveRight() {
61
+ return !this.canMoveRight;
62
+ }
63
+ }
64
+ function _get_tableMeta(_this) {
65
+ return meta.forTable(_this.column.table, ColumnReordering);
66
+ }
67
+ let TableMeta = (_class = class TableMeta {
68
+ constructor(table) {
69
+ /**
70
+ * @private
71
+ *
72
+ * We want to maintain the instance of this ColumnOrder class because
73
+ * we allow the consumer of the table to swap out columns at any time.
74
+ * When they do this, we want to maintain the order of the table, best we can.
75
+ * This is also why the order of the columns is maintained via column key
76
+ */
77
+ _initializerDefineProperty(this, "columnOrder", _descriptor, this);
78
+ /**
79
+ * Using a `ColumnOrder` instance, set the order of all columns
80
+ */
81
+ _defineProperty(this, "setOrder", order => {
82
+ this.columnOrder.setAll(order.map);
83
+ });
84
+ this.table = table;
85
+ }
86
+ /**
87
+ * Get the curret order/position of a column
88
+ */
89
+ getPosition(column) {
90
+ return this.columnOrder.get(column.key);
91
+ }
92
+
93
+ /**
94
+ * Swap the column with the column at `newPosition`
95
+ */
96
+ setPosition(column, newPosition) {
97
+ return this.columnOrder.swapWith(column.key, newPosition);
98
+ }
99
+ /**
100
+ * Revert to default config, delete preferences,
101
+ * and clear the columnOrder
102
+ */
103
+ reset() {
104
+ preferences.forTable(this.table, ColumnReordering).delete('order');
105
+ this.columnOrder = new ColumnOrder({
106
+ columns: () => this.availableColumns,
107
+ save: this.save
108
+ });
109
+ }
110
+
111
+ /**
112
+ * @private
113
+ */
114
+ save(map) {
115
+ const order = {};
116
+ for (const [key, position] of map.entries()) {
117
+ order[key] = position;
118
+ }
119
+ preferences.forTable(this.table, ColumnReordering).set('order', order);
120
+ }
121
+
122
+ /**
123
+ * @private
124
+ */
125
+ read() {
126
+ const order = preferences.forTable(this.table, ColumnReordering).get('order');
127
+ if (!order) return;
128
+ return new Map(Object.entries(order));
129
+ }
130
+ get columns() {
131
+ return this.columnOrder.orderedColumns;
132
+ }
133
+
134
+ /**
135
+ * @private
136
+ * This isn't our data to expose, but it is useful to alias
137
+ */
138
+ get availableColumns() {
139
+ return columns.for(this.table, ColumnReordering);
140
+ }
141
+ }, _descriptor = _applyDecoratedDescriptor(_class.prototype, "columnOrder", [tracked], {
142
+ configurable: true,
143
+ enumerable: true,
144
+ writable: true,
145
+ initializer: function () {
146
+ return new ColumnOrder({
147
+ columns: () => this.availableColumns,
148
+ save: this.save,
149
+ existingOrder: this.read()
150
+ });
151
+ }
152
+ }), _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);
153
+
154
+ /**
155
+ * @private
156
+ * Used for keeping track of and updating column order
157
+ */
158
+ let ColumnOrder = (_class2 = class ColumnOrder {
159
+ constructor(args) {
160
+ /**
161
+ * This map will be empty until we re-order something.
162
+ */
163
+ _defineProperty(this, "map", new TrackedMap());
164
+ _defineProperty(this, "setAll", map => {
165
+ this.map.clear();
166
+ for (const [key, value] of map.entries()) {
167
+ this.map.set(key, value);
168
+ }
169
+ this.args.save?.(map);
170
+ });
171
+ this.args = args;
172
+ if (args.existingOrder) {
173
+ this.map = new TrackedMap(args.existingOrder);
174
+ }
175
+ }
176
+
177
+ /**
178
+ * To account for columnVisibilty, we need to:
179
+ * - get the list of visible columns
180
+ * - get the column order (which preserves the order of hidden columns)
181
+ * - skip over non-visible columns when determining the previous "index"
182
+ * - set the position to whatever that is.
183
+ */
184
+ moveLeft(key) {
185
+ const orderedColumns = this.orderedColumns;
186
+ let found = false;
187
+ let nextColumn;
188
+ for (const column of orderedColumns.reverse()) {
189
+ if (found) {
190
+ nextColumn = column;
191
+ break;
192
+ }
193
+ if (column.key === key) {
194
+ found = true;
195
+ }
196
+ }
197
+ if (!nextColumn) return;
198
+ const nextPosition = this.get(nextColumn.key);
199
+ this.swapWith(key, nextPosition);
200
+ }
201
+ /**
202
+ * To account for columnVisibilty, we need to:
203
+ * - get the list of visible columns
204
+ * - get the column order (which preserves the order of hidden columns)
205
+ * - skip over non-visible columns when determining the next "index"
206
+ * - set the position to whatever that is.
207
+ */
208
+ moveRight(key) {
209
+ const orderedColumns = this.orderedColumns;
210
+ let found = false;
211
+ let nextColumn;
212
+ for (const column of orderedColumns) {
213
+ if (found) {
214
+ nextColumn = column;
215
+ break;
216
+ }
217
+ if (column.key === key) {
218
+ found = true;
219
+ }
220
+ }
221
+ if (!nextColumn) return;
222
+ const nextPosition = this.get(nextColumn.key);
223
+ this.swapWith(key, nextPosition);
224
+ }
225
+
226
+ /**
227
+ * Performs a swap of the column's position with the column at position
228
+ */
229
+ swapWith(key, position) {
230
+ const validPositions = [...this.orderedMap.values()];
231
+
232
+ /**
233
+ * Position to swap to must exist
234
+ */
235
+ if (!validPositions.includes(position)) {
236
+ return;
237
+ }
238
+
239
+ /**
240
+ * Where did this column `key` come from? we can find out
241
+ * by reading orderedMap
242
+ */
243
+ const currentPosition = this.orderedMap.get(key);
244
+ 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).join(', ') + ` and current "map" (${this.map.size}) is: ` + [...this.map.entries()].map(entry => entry.join(' => ')).join(', '), undefined !== currentPosition);
245
+
246
+ /**
247
+ * No need to change anything if the position is the same
248
+ * This helps reduce @tracked invalidations, which in turn reduces DOM thrashing.
249
+ */
250
+ if (currentPosition === position) {
251
+ return false;
252
+ }
253
+ const keyByPosition = new Map([...this.orderedMap.entries()].map(entry => entry.reverse()));
254
+ for (const [existingPosition, key] of keyByPosition.entries()) {
255
+ if (existingPosition === position) {
256
+ /**
257
+ * We swap positions because the positions are not incremental
258
+ * meaning we can have gaps, intentionally, due to hidden columns
259
+ */
260
+ this.map.set(key, currentPosition);
261
+ break;
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Finally, set the position for the requested column
267
+ */
268
+ this.map.set(key, position);
269
+
270
+ /**
271
+ * Now that we've set the value for one column,
272
+ * we need to make sure that all columns have a recorded position.
273
+ */
274
+ for (const [key, position] of this.orderedMap.entries()) {
275
+ if (this.map.has(key)) continue;
276
+ this.map.set(key, position);
277
+ }
278
+ this.args.save?.(this.map);
279
+ }
280
+ get(key) {
281
+ const result = this.orderedMap.get(key);
282
+ assert(`No position found for ${key}. Is the column used within this table?`, /* 0 is falsey, but it's a valid value for position */
283
+ undefined !== result);
284
+ return result;
285
+ }
286
+
287
+ /**
288
+ * The same as this.map, but with all the columns' information
289
+ */
290
+ get orderedMap() {
291
+ return orderOf(this.args.columns(), this.map);
292
+ }
293
+ get orderedColumns() {
294
+ const availableColumns = this.args.columns();
295
+ const availableByKey = availableColumns.reduce((keyMap, column) => {
296
+ keyMap[column.key] = column;
297
+ return keyMap;
298
+ }, {});
299
+ const mergedOrder = orderOf(availableColumns, this.map);
300
+ const result = Array.from({
301
+ length: availableColumns.length
302
+ });
303
+ for (const [key, position] of mergedOrder.entries()) {
304
+ const column = availableByKey[key];
305
+ assert(`Could not find column for pair: ${key} @ @{position}`, column);
306
+ result[position] = column;
307
+ }
308
+ 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);
309
+ return result.filter(Boolean);
310
+ }
311
+ }, _applyDecoratedDescriptor(_class2.prototype, "moveLeft", [action], Object.getOwnPropertyDescriptor(_class2.prototype, "moveLeft"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "moveRight", [action], Object.getOwnPropertyDescriptor(_class2.prototype, "moveRight"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "swapWith", [action], Object.getOwnPropertyDescriptor(_class2.prototype, "swapWith"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "get", [action], Object.getOwnPropertyDescriptor(_class2.prototype, "get"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "orderedMap", [cached], Object.getOwnPropertyDescriptor(_class2.prototype, "orderedMap"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "orderedColumns", [cached], Object.getOwnPropertyDescriptor(_class2.prototype, "orderedColumns"), _class2.prototype), _class2);
312
+
313
+ /**
314
+ * @private
315
+ *
316
+ * Utility for helping determine the percieved order of a set of columns
317
+ * given the original (default) ordering, and then user-configurations
318
+ */
319
+ function orderOf(columns, currentOrder) {
320
+ const result = new Map();
321
+ const availableColumns = columns.map(column => column.key);
322
+ const availableSet = new Set(availableColumns);
323
+ const current = new Map([...currentOrder.entries()].map(([key, position]) => [position, key]));
324
+
325
+ /**
326
+ * O(n * log(n)) ?
327
+ */
328
+ for (let i = 0; i < Math.max(columns.length, current.size); i++) {
329
+ const orderedKey = current.get(i);
330
+ if (orderedKey) {
331
+ /**
332
+ * If the currentOrder specifies columns not presently available,
333
+ * ignore them
334
+ */
335
+ if (availableSet.has(orderedKey)) {
336
+ result.set(orderedKey, i);
337
+ continue;
338
+ }
339
+ }
340
+ let availableKey;
341
+ while (availableKey = availableColumns.shift()) {
342
+ if (result.has(availableKey) || currentOrder.has(availableKey)) {
343
+ continue;
344
+ }
345
+ break;
346
+ }
347
+ if (!availableKey) {
348
+ /**
349
+ * The rest of our columns likely have their order set
350
+ */
351
+ continue;
352
+ }
353
+ result.set(availableKey, i);
354
+ }
355
+ return result;
356
+ }
357
+
358
+ export { ColumnMeta, ColumnOrder, ColumnReordering, TableMeta, orderOf };
359
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +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 '../../plugins/index.ts';\n\nimport { BasePlugin, columns, meta } from '../-private/base.ts';\n\nimport type { PluginPreferences } from '../../plugins/index.ts';\nimport type { Column, Table } from '../../index.ts';\n\ninterface ColumnReorderingPreferences extends PluginPreferences {\n table: {\n order?: Record<string, number>;\n };\n}\n\ndeclare module '@universal-ember/table/plugins' {\n interface Registry {\n ColumnReordering?: ColumnReorderingPreferences;\n 'column-reordering'?: 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 const 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 (\n this.#tableMeta.getPosition(this.column) !==\n this.#tableMeta.columns.length - 1\n );\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 const order: Record<string, number> = {};\n\n for (const [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 const order = preferences\n .forTable(this.table, ColumnReordering)\n .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 const orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (const 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 const 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 (const [key, value] of map.entries()) {\n this.map.set(key, value);\n }\n\n this.args.save?.(map);\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 const orderedColumns = this.orderedColumns;\n\n let found = false;\n let nextColumn: { key: string } | undefined;\n\n for (const 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 const 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 const 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 const 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()]\n .map((entry) => entry.join(' => '))\n .join(', ') +\n ` and the availableColumns are: ` +\n this.args\n .columns()\n .map((column) => column.key)\n .join(', ') +\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 const keyByPosition = new Map<number, string>(\n [...this.orderedMap.entries()].map(\n (entry) => entry.reverse() as [number, string],\n ),\n );\n\n for (const [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 (const [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 const 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 const availableColumns = this.args.columns();\n const availableByKey = availableColumns.reduce(\n (keyMap, column) => {\n keyMap[column.key] = column;\n\n return keyMap;\n },\n {} as Record<string, Column>,\n );\n const mergedOrder = orderOf(availableColumns, this.map);\n\n const result: Column[] = Array.from({ length: availableColumns.length });\n\n for (const [key, position] of mergedOrder.entries()) {\n const 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 const result = new Map<string, number>();\n const availableColumns = columns.map((column) => column.key);\n const availableSet = new Set(availableColumns);\n const 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 const 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","constructor","args","_defineProperty","column","ColumnMeta","table","TableMeta","reset","tableMeta","meta","forTable","columns","_ColumnMeta_brand","WeakSet","_classPrivateMethodInitSpec","_classPrivateGetter","_get_tableMeta","columnOrder","moveLeft","key","moveRight","position","getPosition","value","setPosition","canMoveLeft","canMoveRight","length","cannotMoveLeft","cannotMoveRight","_this","_class","_initializerDefineProperty","_descriptor","order","setAll","map","get","newPosition","swapWith","preferences","delete","ColumnOrder","availableColumns","save","entries","set","read","Map","Object","orderedColumns","for","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","existingOrder","action","getOwnPropertyDescriptor","_class2","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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"}
@@ -0,0 +1,34 @@
1
+ import { meta } from '../-private/base.js';
2
+ import { ColumnReordering } from './plugin.js';
3
+
4
+ function reorderColumns(columns, orderedColumns) {
5
+ if (orderedColumns === undefined) {
6
+ return columns;
7
+ }
8
+ let repositionedColumns = Array.from({
9
+ length: columns.length
10
+ });
11
+ for (const column of columns) {
12
+ const orderedColumn = orderedColumns.find(orderedColumn => column.key === orderedColumn.key);
13
+ const currentMeta = meta.forColumn(column, ColumnReordering);
14
+ if (orderedColumn === undefined) {
15
+ if (currentMeta.position !== undefined && currentMeta.position >= 0) {
16
+ repositionedColumns[currentMeta.position] = column;
17
+ }
18
+ continue;
19
+ }
20
+ const {
21
+ position
22
+ } = orderedColumn;
23
+ if (position !== undefined && !repositionedColumns[position]) {
24
+ repositionedColumns[position] = column;
25
+ } else {
26
+ repositionedColumns.push(column);
27
+ }
28
+ }
29
+ repositionedColumns = repositionedColumns.filter(column => column !== undefined);
30
+ return repositionedColumns;
31
+ }
32
+
33
+ export { reorderColumns };
34
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../src/plugins/column-reordering/utils.ts"],"sourcesContent":["import { meta } from '../-private/base.ts';\nimport { ColumnReordering } from './plugin.ts';\n\nimport type { Column } from '../../index.ts';\n\ntype ColumnOrder = { key: string; position: number | undefined }[];\n\nexport function reorderColumns(\n columns: Column[],\n orderedColumns: ColumnOrder | undefined,\n) {\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(\n (orderedColumn) => column.key === orderedColumn.key,\n );\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(\n (column) => column !== undefined,\n );\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,cAAcA,CAC5BC,OAAiB,EACjBC,cAAuC,EACvC;EACA,IAAIA,cAAc,KAAKC,SAAS,EAAE;AAChC,IAAA,OAAOF,OAAO;AAChB;AAEA,EAAA,IAAIG,mBAA6B,GAAGC,KAAK,CAACC,IAAI,CAAC;IAC7CC,MAAM,EAAEN,OAAO,CAACM;AAClB,GAAC,CAAC;AAEF,EAAA,KAAK,MAAMC,MAAM,IAAIP,OAAO,EAAE;AAC5B,IAAA,MAAMQ,aAAa,GAAGP,cAAc,CAACQ,IAAI,CACtCD,aAAa,IAAKD,MAAM,CAACG,GAAG,KAAKF,aAAa,CAACE,GAClD,CAAC;IACD,MAAMC,WAAW,GAAGC,IAAI,CAACC,SAAS,CAACN,MAAM,EAAEO,gBAAgB,CAAC;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;AACpD;AAEA,MAAA;AACF;IAEA,MAAM;AAAEQ,MAAAA;AAAS,KAAC,GAAGP,aAAa;IAElC,IAAIO,QAAQ,KAAKb,SAAS,IAAI,CAACC,mBAAmB,CAACY,QAAQ,CAAC,EAAE;AAC5DZ,MAAAA,mBAAmB,CAACY,QAAQ,CAAC,GAAGR,MAAM;AACxC,KAAC,MAAM;AACLJ,MAAAA,mBAAmB,CAACa,IAAI,CAACT,MAAM,CAAC;AAClC;AACF;EAEAJ,mBAAmB,GAAGA,mBAAmB,CAACc,MAAM,CAC7CV,MAAM,IAAKA,MAAM,KAAKL,SACzB,CAAC;AAED,EAAA,OAAOC,mBAAmB;AAC5B;;;;"}