@neovici/cosmoz-omnitable 14.14.3 → 14.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/dist/cosmoz-omnitable-column-amount.d.ts +2 -0
  2. package/dist/cosmoz-omnitable-column-amount.d.ts.map +1 -0
  3. package/dist/cosmoz-omnitable-column-amount.js +113 -0
  4. package/dist/cosmoz-omnitable-column-autocomplete.d.ts +6 -0
  5. package/dist/cosmoz-omnitable-column-autocomplete.d.ts.map +1 -0
  6. package/dist/cosmoz-omnitable-column-autocomplete.js +87 -0
  7. package/dist/cosmoz-omnitable-column-boolean.d.ts +17 -0
  8. package/dist/cosmoz-omnitable-column-boolean.d.ts.map +1 -0
  9. package/dist/cosmoz-omnitable-column-boolean.js +105 -0
  10. package/dist/cosmoz-omnitable-column-date.d.ts +2 -0
  11. package/dist/cosmoz-omnitable-column-date.d.ts.map +1 -0
  12. package/dist/cosmoz-omnitable-column-date.js +97 -0
  13. package/dist/cosmoz-omnitable-column-datetime.d.ts +2 -0
  14. package/dist/cosmoz-omnitable-column-datetime.d.ts.map +1 -0
  15. package/dist/cosmoz-omnitable-column-datetime.js +106 -0
  16. package/dist/cosmoz-omnitable-column-list-data.d.ts +2 -0
  17. package/dist/cosmoz-omnitable-column-list-data.d.ts.map +1 -0
  18. package/dist/cosmoz-omnitable-column-list-data.js +123 -0
  19. package/dist/cosmoz-omnitable-column-list-horizontal.d.ts +2 -0
  20. package/dist/cosmoz-omnitable-column-list-horizontal.d.ts.map +1 -0
  21. package/{cosmoz-omnitable-column-list-horizontal.js → dist/cosmoz-omnitable-column-list-horizontal.js} +15 -37
  22. package/dist/cosmoz-omnitable-column-list-mixin.d.ts +59 -0
  23. package/dist/cosmoz-omnitable-column-list-mixin.d.ts.map +1 -0
  24. package/dist/cosmoz-omnitable-column-list-mixin.js +139 -0
  25. package/dist/cosmoz-omnitable-column-list.d.ts +2 -0
  26. package/dist/cosmoz-omnitable-column-list.d.ts.map +1 -0
  27. package/{cosmoz-omnitable-column-list.js → dist/cosmoz-omnitable-column-list.js} +28 -47
  28. package/dist/cosmoz-omnitable-column-mixin.d.ts +161 -0
  29. package/dist/cosmoz-omnitable-column-mixin.d.ts.map +1 -0
  30. package/dist/cosmoz-omnitable-column-mixin.js +121 -0
  31. package/dist/cosmoz-omnitable-column-number.d.ts +2 -0
  32. package/dist/cosmoz-omnitable-column-number.d.ts.map +1 -0
  33. package/dist/cosmoz-omnitable-column-number.js +112 -0
  34. package/dist/cosmoz-omnitable-column-time.d.ts +2 -0
  35. package/dist/cosmoz-omnitable-column-time.d.ts.map +1 -0
  36. package/dist/cosmoz-omnitable-column-time.js +102 -0
  37. package/dist/cosmoz-omnitable-column.d.ts +2 -0
  38. package/dist/cosmoz-omnitable-column.d.ts.map +1 -0
  39. package/dist/cosmoz-omnitable-column.js +75 -0
  40. package/dist/cosmoz-omnitable-columns.d.ts +2 -0
  41. package/dist/cosmoz-omnitable-columns.d.ts.map +1 -0
  42. package/{cosmoz-omnitable-columns.js → dist/cosmoz-omnitable-columns.js} +1 -0
  43. package/dist/cosmoz-omnitable-group-row.d.ts +2 -0
  44. package/dist/cosmoz-omnitable-group-row.d.ts.map +1 -0
  45. package/dist/cosmoz-omnitable-group-row.js +15 -0
  46. package/dist/cosmoz-omnitable-header-row.d.ts +2 -0
  47. package/dist/cosmoz-omnitable-header-row.d.ts.map +1 -0
  48. package/{cosmoz-omnitable-header-row.js → dist/cosmoz-omnitable-header-row.js} +12 -45
  49. package/dist/cosmoz-omnitable-item-expand-line.d.ts +2 -0
  50. package/dist/cosmoz-omnitable-item-expand-line.d.ts.map +1 -0
  51. package/{cosmoz-omnitable-item-expand-line.js → dist/cosmoz-omnitable-item-expand-line.js} +4 -9
  52. package/dist/cosmoz-omnitable-item-expand.d.ts +2 -0
  53. package/dist/cosmoz-omnitable-item-expand.d.ts.map +1 -0
  54. package/{cosmoz-omnitable-item-expand.js → dist/cosmoz-omnitable-item-expand.js} +10 -18
  55. package/dist/cosmoz-omnitable-item-row.d.ts +2 -0
  56. package/dist/cosmoz-omnitable-item-row.d.ts.map +1 -0
  57. package/dist/cosmoz-omnitable-item-row.js +19 -0
  58. package/dist/cosmoz-omnitable-skeleton.d.ts +2 -0
  59. package/dist/cosmoz-omnitable-skeleton.d.ts.map +1 -0
  60. package/{cosmoz-omnitable-skeleton.js → dist/cosmoz-omnitable-skeleton.js} +9 -25
  61. package/dist/cosmoz-omnitable-styles.d.ts +4 -0
  62. package/dist/cosmoz-omnitable-styles.d.ts.map +1 -0
  63. package/{cosmoz-omnitable-styles.js → dist/cosmoz-omnitable-styles.js} +3 -4
  64. package/dist/cosmoz-omnitable.d.ts +3 -0
  65. package/dist/cosmoz-omnitable.d.ts.map +1 -0
  66. package/{cosmoz-omnitable.js → dist/cosmoz-omnitable.js} +27 -40
  67. package/dist/grouped-list/cosmoz-grouped-list-row.d.ts +2 -0
  68. package/dist/grouped-list/cosmoz-grouped-list-row.d.ts.map +1 -0
  69. package/dist/grouped-list/cosmoz-grouped-list-row.js +31 -0
  70. package/dist/grouped-list/cosmoz-grouped-list.d.ts +2 -0
  71. package/dist/grouped-list/cosmoz-grouped-list.d.ts.map +1 -0
  72. package/dist/grouped-list/cosmoz-grouped-list.js +5 -0
  73. package/dist/grouped-list/index.d.ts +2 -0
  74. package/dist/grouped-list/index.d.ts.map +1 -0
  75. package/{grouped-list → dist/grouped-list}/index.js +1 -0
  76. package/dist/grouped-list/use-collapsible-items.d.ts +7 -0
  77. package/dist/grouped-list/use-collapsible-items.d.ts.map +1 -0
  78. package/dist/grouped-list/use-collapsible-items.js +27 -0
  79. package/dist/grouped-list/use-cosmoz-grouped-list.d.ts +15 -0
  80. package/dist/grouped-list/use-cosmoz-grouped-list.d.ts.map +1 -0
  81. package/dist/grouped-list/use-cosmoz-grouped-list.js +66 -0
  82. package/dist/grouped-list/use-selected-items.d.ts +19 -0
  83. package/dist/grouped-list/use-selected-items.d.ts.map +1 -0
  84. package/dist/grouped-list/use-selected-items.js +105 -0
  85. package/dist/grouped-list/use-weak-state.d.ts +6 -0
  86. package/dist/grouped-list/use-weak-state.d.ts.map +1 -0
  87. package/dist/grouped-list/use-weak-state.js +15 -0
  88. package/dist/grouped-list/utils.d.ts +11 -0
  89. package/dist/grouped-list/utils.d.ts.map +1 -0
  90. package/dist/grouped-list/utils.js +57 -0
  91. package/dist/lib/compute-layout.d.ts +3 -0
  92. package/dist/lib/compute-layout.d.ts.map +1 -0
  93. package/dist/lib/compute-layout.js +46 -0
  94. package/dist/lib/cosmoz-omnitable-amount-range-input.d.ts +2 -0
  95. package/dist/lib/cosmoz-omnitable-amount-range-input.d.ts.map +1 -0
  96. package/dist/lib/cosmoz-omnitable-amount-range-input.js +304 -0
  97. package/dist/lib/cosmoz-omnitable-date-input-mixin.d.ts +2 -0
  98. package/dist/lib/cosmoz-omnitable-date-input-mixin.d.ts.map +1 -0
  99. package/dist/lib/cosmoz-omnitable-date-input-mixin.js +149 -0
  100. package/dist/lib/cosmoz-omnitable-date-range-input.d.ts +2 -0
  101. package/dist/lib/cosmoz-omnitable-date-range-input.d.ts.map +1 -0
  102. package/{lib → dist/lib}/cosmoz-omnitable-date-range-input.js +32 -41
  103. package/dist/lib/cosmoz-omnitable-datetime-range-input.d.ts +2 -0
  104. package/dist/lib/cosmoz-omnitable-datetime-range-input.d.ts.map +1 -0
  105. package/{lib → dist/lib}/cosmoz-omnitable-datetime-range-input.js +27 -38
  106. package/dist/lib/cosmoz-omnitable-number-range-input.d.ts +2 -0
  107. package/dist/lib/cosmoz-omnitable-number-range-input.d.ts.map +1 -0
  108. package/{lib → dist/lib}/cosmoz-omnitable-number-range-input.js +73 -83
  109. package/dist/lib/cosmoz-omnitable-range-input-mixin.d.ts +2 -0
  110. package/dist/lib/cosmoz-omnitable-range-input-mixin.d.ts.map +1 -0
  111. package/dist/lib/cosmoz-omnitable-range-input-mixin.js +337 -0
  112. package/dist/lib/cosmoz-omnitable-resize-nub.d.ts +2 -0
  113. package/dist/lib/cosmoz-omnitable-resize-nub.d.ts.map +1 -0
  114. package/dist/lib/cosmoz-omnitable-resize-nub.js +33 -0
  115. package/dist/lib/cosmoz-omnitable-time-range-input.d.ts +2 -0
  116. package/dist/lib/cosmoz-omnitable-time-range-input.d.ts.map +1 -0
  117. package/dist/lib/cosmoz-omnitable-time-range-input.js +125 -0
  118. package/dist/lib/generic-sorter.d.ts +2 -0
  119. package/dist/lib/generic-sorter.d.ts.map +1 -0
  120. package/dist/lib/generic-sorter.js +29 -0
  121. package/dist/lib/icons.d.ts +5 -0
  122. package/dist/lib/icons.d.ts.map +1 -0
  123. package/{lib → dist/lib}/icons.js +5 -8
  124. package/dist/lib/layout.d.ts +2 -0
  125. package/dist/lib/layout.d.ts.map +1 -0
  126. package/dist/lib/layout.js +41 -0
  127. package/dist/lib/polymer-haunted-render-mixin.d.ts +10 -0
  128. package/dist/lib/polymer-haunted-render-mixin.d.ts.map +1 -0
  129. package/dist/lib/polymer-haunted-render-mixin.js +16 -0
  130. package/dist/lib/render-footer.d.ts +9 -0
  131. package/dist/lib/render-footer.d.ts.map +1 -0
  132. package/{lib → dist/lib}/render-footer.js +4 -17
  133. package/dist/lib/render-header.d.ts +14 -0
  134. package/dist/lib/render-header.d.ts.map +1 -0
  135. package/{lib → dist/lib}/render-header.js +6 -27
  136. package/dist/lib/render-list.d.ts +2 -0
  137. package/dist/lib/render-list.d.ts.map +1 -0
  138. package/{lib → dist/lib}/render-list.js +12 -45
  139. package/dist/lib/save-as-csv-action.d.ts +2 -0
  140. package/dist/lib/save-as-csv-action.d.ts.map +1 -0
  141. package/dist/lib/save-as-csv-action.js +26 -0
  142. package/dist/lib/save-as-xlsx-action.d.ts +3 -0
  143. package/dist/lib/save-as-xlsx-action.d.ts.map +1 -0
  144. package/dist/lib/save-as-xlsx-action.js +18 -0
  145. package/dist/lib/settings/cosmoz-omnitable-settings.d.ts +2 -0
  146. package/dist/lib/settings/cosmoz-omnitable-settings.d.ts.map +1 -0
  147. package/{lib → dist/lib}/settings/cosmoz-omnitable-settings.js +27 -69
  148. package/dist/lib/settings/cosmoz-omnitable-sort-group.d.ts +14 -0
  149. package/dist/lib/settings/cosmoz-omnitable-sort-group.d.ts.map +1 -0
  150. package/dist/lib/settings/cosmoz-omnitable-sort-group.js +55 -0
  151. package/dist/lib/settings/drivers/context.d.ts +12 -0
  152. package/dist/lib/settings/drivers/context.d.ts.map +1 -0
  153. package/dist/lib/settings/drivers/context.js +11 -0
  154. package/dist/lib/settings/drivers/index.d.ts +4 -0
  155. package/dist/lib/settings/drivers/index.d.ts.map +1 -0
  156. package/{lib → dist/lib}/settings/drivers/index.js +1 -0
  157. package/dist/lib/settings/drivers/local.d.ts +8 -0
  158. package/dist/lib/settings/drivers/local.d.ts.map +1 -0
  159. package/dist/lib/settings/drivers/local.js +33 -0
  160. package/dist/lib/settings/drivers/remote.d.ts +8 -0
  161. package/dist/lib/settings/drivers/remote.d.ts.map +1 -0
  162. package/dist/lib/settings/drivers/remote.js +25 -0
  163. package/dist/lib/settings/index.d.ts +2 -0
  164. package/dist/lib/settings/index.d.ts.map +1 -0
  165. package/{lib → dist/lib}/settings/index.js +1 -1
  166. package/dist/lib/settings/normalize.d.ts +11 -0
  167. package/dist/lib/settings/normalize.d.ts.map +1 -0
  168. package/dist/lib/settings/normalize.js +47 -0
  169. package/dist/lib/settings/style.css.d.ts +4 -0
  170. package/dist/lib/settings/style.css.d.ts.map +1 -0
  171. package/{lib → dist/lib}/settings/style.css.js +3 -4
  172. package/dist/lib/settings/use-saved-settings.d.ts +9 -0
  173. package/dist/lib/settings/use-saved-settings.d.ts.map +1 -0
  174. package/dist/lib/settings/use-saved-settings.js +35 -0
  175. package/dist/lib/settings/use-settings-ui.d.ts +3 -0
  176. package/dist/lib/settings/use-settings-ui.d.ts.map +1 -0
  177. package/dist/lib/settings/use-settings-ui.js +78 -0
  178. package/dist/lib/settings/use-settings.d.ts +23 -0
  179. package/dist/lib/settings/use-settings.d.ts.map +1 -0
  180. package/dist/lib/settings/use-settings.js +26 -0
  181. package/dist/lib/use-canvas-width.d.ts +2 -0
  182. package/dist/lib/use-canvas-width.d.ts.map +1 -0
  183. package/dist/lib/use-canvas-width.js +8 -0
  184. package/dist/lib/use-dom-columns.d.ts +5 -0
  185. package/dist/lib/use-dom-columns.d.ts.map +1 -0
  186. package/dist/lib/use-dom-columns.js +127 -0
  187. package/dist/lib/use-fast-layout.d.ts +13 -0
  188. package/dist/lib/use-fast-layout.d.ts.map +1 -0
  189. package/dist/lib/use-fast-layout.js +47 -0
  190. package/dist/lib/use-footer.d.ts +10 -0
  191. package/dist/lib/use-footer.d.ts.map +1 -0
  192. package/dist/lib/use-footer.js +11 -0
  193. package/dist/lib/use-hash-state.d.ts +4 -0
  194. package/dist/lib/use-hash-state.d.ts.map +1 -0
  195. package/dist/lib/use-hash-state.js +32 -0
  196. package/dist/lib/use-header.d.ts +21 -0
  197. package/dist/lib/use-header.d.ts.map +1 -0
  198. package/dist/lib/use-header.js +38 -0
  199. package/dist/lib/use-layout.d.ts +7 -0
  200. package/dist/lib/use-layout.d.ts.map +1 -0
  201. package/dist/lib/use-layout.js +21 -0
  202. package/dist/lib/use-list.d.ts +31 -0
  203. package/dist/lib/use-list.d.ts.map +1 -0
  204. package/dist/lib/use-list.js +198 -0
  205. package/dist/lib/use-mini.d.ts +10 -0
  206. package/dist/lib/use-mini.d.ts.map +1 -0
  207. package/dist/lib/use-mini.js +19 -0
  208. package/dist/lib/use-omnitable.d.ts +37 -0
  209. package/dist/lib/use-omnitable.d.ts.map +1 -0
  210. package/dist/lib/use-omnitable.js +74 -0
  211. package/dist/lib/use-processed-items.d.ts +17 -0
  212. package/dist/lib/use-processed-items.d.ts.map +1 -0
  213. package/dist/lib/use-processed-items.js +151 -0
  214. package/dist/lib/use-public-interface.d.ts +7 -0
  215. package/dist/lib/use-public-interface.d.ts.map +1 -0
  216. package/dist/lib/use-public-interface.js +82 -0
  217. package/dist/lib/use-resizable-columns.d.ts +7 -0
  218. package/dist/lib/use-resizable-columns.d.ts.map +1 -0
  219. package/dist/lib/use-resizable-columns.js +38 -0
  220. package/dist/lib/use-sort-and-group-options.d.ts +26 -0
  221. package/dist/lib/use-sort-and-group-options.d.ts.map +1 -0
  222. package/dist/lib/use-sort-and-group-options.js +36 -0
  223. package/dist/lib/use-track-size.d.ts +2 -0
  224. package/dist/lib/use-track-size.d.ts.map +1 -0
  225. package/dist/lib/use-track-size.js +15 -0
  226. package/dist/lib/use-tween-array.d.ts +3 -0
  227. package/dist/lib/use-tween-array.d.ts.map +1 -0
  228. package/dist/lib/use-tween-array.js +50 -0
  229. package/dist/lib/utils-amount.d.ts +26 -0
  230. package/dist/lib/utils-amount.d.ts.map +1 -0
  231. package/dist/lib/utils-amount.js +99 -0
  232. package/dist/lib/utils-data.d.ts +8 -0
  233. package/dist/lib/utils-data.d.ts.map +1 -0
  234. package/dist/lib/utils-data.js +28 -0
  235. package/dist/lib/utils-date.d.ts +25 -0
  236. package/dist/lib/utils-date.d.ts.map +1 -0
  237. package/dist/lib/utils-date.js +161 -0
  238. package/dist/lib/utils-datetime.d.ts +16 -0
  239. package/dist/lib/utils-datetime.d.ts.map +1 -0
  240. package/dist/lib/utils-datetime.js +52 -0
  241. package/dist/lib/utils-number.d.ts +19 -0
  242. package/dist/lib/utils-number.d.ts.map +1 -0
  243. package/dist/lib/utils-number.js +87 -0
  244. package/dist/lib/utils-time.d.ts +17 -0
  245. package/dist/lib/utils-time.d.ts.map +1 -0
  246. package/dist/lib/utils-time.js +88 -0
  247. package/dist/lib/utils.d.ts +3 -0
  248. package/dist/lib/utils.d.ts.map +1 -0
  249. package/dist/lib/utils.js +14 -0
  250. package/dist/ui-helpers/cosmoz-clear-button.d.ts +2 -0
  251. package/dist/ui-helpers/cosmoz-clear-button.d.ts.map +1 -0
  252. package/{ui-helpers → dist/ui-helpers}/cosmoz-clear-button.js +3 -5
  253. package/package.json +38 -8
  254. package/cosmoz-omnitable-column-amount.js +0 -162
  255. package/cosmoz-omnitable-column-autocomplete.js +0 -113
  256. package/cosmoz-omnitable-column-boolean.js +0 -168
  257. package/cosmoz-omnitable-column-date.js +0 -133
  258. package/cosmoz-omnitable-column-datetime.js +0 -145
  259. package/cosmoz-omnitable-column-list-data.js +0 -141
  260. package/cosmoz-omnitable-column-list-mixin.js +0 -198
  261. package/cosmoz-omnitable-column-mixin.js +0 -149
  262. package/cosmoz-omnitable-column-number.js +0 -157
  263. package/cosmoz-omnitable-column-time.js +0 -137
  264. package/cosmoz-omnitable-column.js +0 -99
  265. package/cosmoz-omnitable-group-row.js +0 -20
  266. package/cosmoz-omnitable-item-row.js +0 -38
  267. package/grouped-list/cosmoz-grouped-list-row.js +0 -41
  268. package/grouped-list/cosmoz-grouped-list.js +0 -13
  269. package/grouped-list/use-collapsible-items.js +0 -32
  270. package/grouped-list/use-cosmoz-grouped-list.js +0 -102
  271. package/grouped-list/use-selected-items.js +0 -140
  272. package/grouped-list/use-weak-state.js +0 -21
  273. package/grouped-list/utils.js +0 -89
  274. package/lib/compute-layout.js +0 -74
  275. package/lib/cosmoz-omnitable-amount-range-input.js +0 -353
  276. package/lib/cosmoz-omnitable-date-input-mixin.js +0 -182
  277. package/lib/cosmoz-omnitable-range-input-mixin.js +0 -451
  278. package/lib/cosmoz-omnitable-resize-nub.js +0 -41
  279. package/lib/cosmoz-omnitable-time-range-input.js +0 -154
  280. package/lib/generic-sorter.js +0 -35
  281. package/lib/layout.js +0 -61
  282. package/lib/polymer-haunted-render-mixin.js +0 -19
  283. package/lib/save-as-csv-action.js +0 -36
  284. package/lib/save-as-xlsx-action.js +0 -27
  285. package/lib/settings/cosmoz-omnitable-sort-group.js +0 -74
  286. package/lib/settings/drivers/context.js +0 -16
  287. package/lib/settings/drivers/local.js +0 -29
  288. package/lib/settings/drivers/remote.js +0 -22
  289. package/lib/settings/normalize.js +0 -76
  290. package/lib/settings/use-saved-settings.js +0 -43
  291. package/lib/settings/use-settings-ui.js +0 -125
  292. package/lib/settings/use-settings.js +0 -53
  293. package/lib/use-canvas-width.js +0 -12
  294. package/lib/use-dom-columns.js +0 -166
  295. package/lib/use-fast-layout.js +0 -73
  296. package/lib/use-footer.js +0 -16
  297. package/lib/use-hash-state.js +0 -71
  298. package/lib/use-header.js +0 -71
  299. package/lib/use-layout.js +0 -32
  300. package/lib/use-list.js +0 -263
  301. package/lib/use-mini.js +0 -30
  302. package/lib/use-omnitable.js +0 -99
  303. package/lib/use-processed-items.js +0 -254
  304. package/lib/use-public-interface.js +0 -107
  305. package/lib/use-resizable-columns.js +0 -63
  306. package/lib/use-sort-and-group-options.js +0 -95
  307. package/lib/use-track-size.js +0 -23
  308. package/lib/use-tween-array.js +0 -60
  309. package/lib/utils-amount.js +0 -131
  310. package/lib/utils-data.js +0 -42
  311. package/lib/utils-date.js +0 -194
  312. package/lib/utils-datetime.js +0 -66
  313. package/lib/utils-number.js +0 -111
  314. package/lib/utils-time.js +0 -112
  315. package/lib/utils.js +0 -17
package/lib/use-list.js DELETED
@@ -1,263 +0,0 @@
1
- import { html, useCallback, useEffect, useMemo, useRef } from '@pionjs/pion';
2
- import { when } from 'lit-html/directives/when.js';
3
- import { isEmpty } from '@neovici/cosmoz-utils/template';
4
- import { indexSymbol } from './utils';
5
- import { onItemChange as _onItemChange } from './utils-data';
6
-
7
- const arrow = html`
8
- <svg
9
- viewBox="0 0 24 24"
10
- preserveAspectRatio="xMidYMid meet"
11
- focusable="false"
12
- >
13
- <g>
14
- <path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"></path>
15
- </g>
16
- </svg>
17
- `;
18
-
19
- const _getGroupRowClasses = (folded) =>
20
- folded ? 'groupRow groupRow-folded' : 'groupRow';
21
-
22
- const renderMinis =
23
- ({ item, index }) =>
24
- (columns) =>
25
- when(
26
- columns?.length > 0,
27
- () => html`
28
- <div class="itemRow-minis" part="item-minis">
29
- ${columns.map(
30
- (column) =>
31
- html`<div
32
- class="itemRow-mini"
33
- part="item-mini item-mini-${column.name}"
34
- >
35
- ${(column.renderMini ?? column.renderCell)(column, {
36
- item,
37
- index,
38
- })}
39
- </div>`,
40
- )}
41
- </div>
42
- `,
43
- );
44
-
45
- const renderItem =
46
- ({
47
- columns,
48
- collapsedColumns,
49
- miniColumns,
50
- onItemClick,
51
- onCheckboxChange,
52
- dataIsValid,
53
- groupOnColumn,
54
- onItemChange,
55
- rowPartFn,
56
- }) =>
57
- (item, index, { selected, expanded, toggleCollapse }) => html`
58
- <div
59
- ?selected=${selected}
60
- part="${[
61
- 'itemRow',
62
- `itemRow-${item[indexSymbol]}`,
63
- rowPartFn?.(item, index),
64
- ]
65
- .filter(Boolean)
66
- .join(' ')}"
67
- .dataIndex=${item[indexSymbol]}
68
- .dataItem=${item}
69
- class="itemRow"
70
- @click=${onItemClick}
71
- >
72
- <div class="itemRow-wrapper" part="itemRow-wrapper">
73
- <input
74
- class="checkbox"
75
- type="checkbox"
76
- part="checkbox"
77
- .checked=${selected}
78
- .dataItem=${item}
79
- @input=${onCheckboxChange}
80
- ?disabled=${!dataIsValid}
81
- />
82
- <cosmoz-omnitable-item-row
83
- part="itemRow-inner"
84
- .columns=${columns}
85
- .index=${index}
86
- .selected=${selected}
87
- .expanded=${expanded}
88
- .item=${item}
89
- .groupOnColumn=${groupOnColumn}
90
- .onItemChange=${onItemChange}
91
- >
92
- </cosmoz-omnitable-item-row>
93
- <button
94
- class="expand"
95
- ?hidden="${isEmpty(collapsedColumns.length)}"
96
- ?aria-expanded="${expanded}"
97
- @click="${toggleCollapse}"
98
- >
99
- ${arrow}
100
- </button>
101
- </div>
102
- ${renderMinis({ item, index })(miniColumns)}
103
- </div>
104
- <cosmoz-omnitable-item-expand
105
- .columns=${collapsedColumns}
106
- .item=${item}
107
- .index=${index}
108
- ?selected=${selected}
109
- ?expanded=${expanded}
110
- .groupOnColumn=${groupOnColumn}
111
- part="item-expand"
112
- >
113
- </cosmoz-omnitable-item-expand>
114
- `;
115
-
116
- const renderGroup =
117
- ({ onCheckboxChange, dataIsValid, groupOnColumn }) =>
118
- (item, index, { selected, folded, toggleFold }) =>
119
- html` <div
120
- class="${_getGroupRowClasses(folded)}"
121
- part="groupRow groupRow-${item[indexSymbol]}"
122
- >
123
- <input
124
- class="checkbox"
125
- type="checkbox"
126
- .checked=${selected}
127
- .dataItem=${item}
128
- @input=${onCheckboxChange}
129
- ?disabled=${!dataIsValid}
130
- />
131
- <h3 class="groupRow-label">
132
- <div><span>${groupOnColumn?.title}</span>: &nbsp;</div>
133
- <cosmoz-omnitable-group-row
134
- .column=${groupOnColumn}
135
- .item=${item.items?.[0]}
136
- .selected=${selected}
137
- .folded=${folded}
138
- .group=${item}
139
- ></cosmoz-omnitable-group-row>
140
- </h3>
141
- <div class="groupRow-badge">${item.items.length}</div>
142
- <button class="expand" ?aria-expanded="${folded}" @click=${toggleFold}>
143
- ${arrow}
144
- </button>
145
- </div>`;
146
-
147
- export const useList = ({
148
- host,
149
- error,
150
- dataIsValid,
151
- processedItems,
152
- columns,
153
- collapsedColumns,
154
- miniColumns,
155
- sortAndGroupOptions,
156
- rowPartFn,
157
- ...rest
158
- }) => {
159
- const { loading = false, displayEmptyGroups = false, compareItemsFn } = host,
160
- keyState = useRef({ shiftKey: false, ctrlKey: false }),
161
- onCheckboxChange = useCallback((event) => {
162
- const item = event.target.dataItem,
163
- selected = event.target.checked;
164
- if (keyState.current.shiftKey) {
165
- host.shadowRoot
166
- .querySelector('#groupedList')
167
- .toggleSelectTo(item, selected);
168
- } else if (keyState.current.ctrlKey) {
169
- event.target.checked = true;
170
- host.shadowRoot.querySelector('#groupedList').selectOnly(item);
171
- } else {
172
- host.shadowRoot
173
- .querySelector('#groupedList')
174
- .toggleSelect(item, selected);
175
- }
176
-
177
- event.preventDefault();
178
- event.stopPropagation();
179
- }, []);
180
-
181
- useEffect(() => {
182
- const handler = ({ shiftKey, ctrlKey }) => {
183
- keyState.current = { shiftKey, ctrlKey };
184
- };
185
- window.addEventListener('keydown', handler);
186
- window.addEventListener('keyup', handler);
187
- return () => {
188
- window.removeEventListener('keydown', handler);
189
- window.removeEventListener('keyup', handler);
190
- };
191
- }, []);
192
-
193
- const onItemClick = useCallback((e) => {
194
- const composedPath = e.composedPath(),
195
- path = composedPath.slice(0, composedPath.indexOf(e.currentTarget));
196
-
197
- if (path.find((e) => e.matches?.('a, .checkbox, .expand'))) {
198
- return;
199
- }
200
-
201
- host.dispatchEvent(
202
- new window.CustomEvent('omnitable-item-click', {
203
- bubbles: true,
204
- composed: true,
205
- detail: {
206
- item: e.currentTarget.dataItem,
207
- index: e.currentTarget.dataIndex,
208
- },
209
- }),
210
- );
211
- }, []);
212
-
213
- const { groupOnColumn } = sortAndGroupOptions,
214
- onItemChange = useCallback(
215
- (column, item) => (value) => _onItemChange(host, column, item, value),
216
- [],
217
- );
218
-
219
- return {
220
- ...rest,
221
- processedItems,
222
- dataIsValid,
223
- filterIsTooStrict: dataIsValid && processedItems.length < 1,
224
- loading,
225
- compareItemsFn,
226
- displayEmptyGroups,
227
- error,
228
-
229
- renderItem: useMemo(
230
- () =>
231
- renderItem({
232
- columns,
233
- collapsedColumns,
234
- miniColumns,
235
- onItemClick,
236
- onCheckboxChange,
237
- dataIsValid,
238
- groupOnColumn,
239
- onItemChange,
240
- rowPartFn,
241
- }),
242
- [
243
- columns,
244
- collapsedColumns,
245
- onItemClick,
246
- onCheckboxChange,
247
- dataIsValid,
248
- groupOnColumn,
249
- onItemChange,
250
- rowPartFn,
251
- ],
252
- ),
253
- renderGroup: useMemo(
254
- () =>
255
- renderGroup({
256
- onCheckboxChange,
257
- dataIsValid,
258
- groupOnColumn,
259
- }),
260
- [onCheckboxChange, dataIsValid, groupOnColumn],
261
- ),
262
- };
263
- };
package/lib/use-mini.js DELETED
@@ -1,30 +0,0 @@
1
- import { useMemo, useEffect } from '@pionjs/pion';
2
-
3
- export const useMini = ({ host, canvasWidth, columns: _columns }) => {
4
- const breakpoint = host.miniBreakpoint ?? 480;
5
- const isMiniSize = useMemo(
6
- () => canvasWidth <= breakpoint,
7
- [canvasWidth, breakpoint],
8
- );
9
- const columns = useMemo(
10
- () =>
11
- isMiniSize
12
- ? _columns
13
- ?.filter((c) => c.mini != null)
14
- .sort((a, b) => (a.mini ?? 0) - (b.mini ?? 0))
15
- : [],
16
- [_columns, isMiniSize],
17
- ),
18
- [miniColumn, ...miniColumns] = columns ?? [],
19
- hasMiniColumn = !!miniColumn;
20
-
21
- useEffect(() => {
22
- host.toggleAttribute('mini', hasMiniColumn);
23
- }, [hasMiniColumn]);
24
-
25
- return {
26
- isMini: hasMiniColumn && isMiniSize,
27
- miniColumn,
28
- miniColumns,
29
- };
30
- };
@@ -1,99 +0,0 @@
1
- import { useState } from '@pionjs/pion';
2
- import { useSettings } from './settings';
3
- import { useFastLayout } from './use-fast-layout';
4
- import { useFooter } from './use-footer';
5
- import { useHeader } from './use-header';
6
- import { useList } from './use-list';
7
- import { useProcessedItems } from './use-processed-items';
8
- import { usePublicInterface } from './use-public-interface';
9
- import { useSortAndGroupOptions } from './use-sort-and-group-options';
10
-
11
- export const useOmnitable = (host) => {
12
- const {
13
- hashParam,
14
- settingsId,
15
- data,
16
- resizeSpeedFactor,
17
- noLocal,
18
- noLocalSort = noLocal,
19
- noLocalFilter = noLocal,
20
- error,
21
- rowPartFn,
22
- } = host,
23
- settingS = useSettings({ settingsId, host }),
24
- { settings, setSettings, columns, resetRef } = settingS,
25
- sortAndGroupOptions = useSortAndGroupOptions(
26
- columns,
27
- hashParam,
28
- settings,
29
- setSettings,
30
- resetRef,
31
- ),
32
- // TODO: drop filterFunctions
33
- { processedItems, visibleData, filters, setFilterState, filterFunctions } =
34
- useProcessedItems({
35
- data,
36
- columns,
37
- hashParam,
38
- sortAndGroupOptions,
39
- noLocalSort,
40
- noLocalFilter,
41
- }),
42
- { isMini, collapsedColumns, miniColumns } = useFastLayout({
43
- host,
44
- columns,
45
- settings,
46
- setSettings,
47
- resizeSpeedFactor,
48
- sortAndGroupOptions,
49
- }),
50
- dataIsValid = data && Array.isArray(data) && data.length > 0,
51
- [selectedItems, setSelectedItems] = useState([]);
52
-
53
- usePublicInterface({
54
- host,
55
- visibleData,
56
- sortedFilteredGroupedItems: processedItems,
57
- columns,
58
- filters,
59
- setFilterState,
60
- selectedItems,
61
- isMini,
62
- ...sortAndGroupOptions,
63
- });
64
-
65
- return {
66
- header: useHeader({
67
- host,
68
- selectedItems,
69
- sortAndGroupOptions,
70
- dataIsValid,
71
- data,
72
- columns,
73
- filters,
74
- collapsedColumns,
75
- settings,
76
- filterFunctions,
77
- settingS,
78
- setFilterState,
79
- hideSelectAll: host.hideSelectAll === true,
80
- }),
81
- list: useList({
82
- host,
83
- error,
84
- dataIsValid,
85
- processedItems,
86
- setSelectedItems,
87
- columns,
88
- collapsedColumns,
89
- miniColumns,
90
- sortAndGroupOptions,
91
- rowPartFn,
92
- }),
93
- footer: useFooter({
94
- host,
95
- selectedItems,
96
- columns,
97
- }),
98
- };
99
- };
@@ -1,254 +0,0 @@
1
- import { useCallback, useEffect, useMemo } from '@pionjs/pion';
2
- import { invoke } from '@neovici/cosmoz-utils/function';
3
- import { genericSorter } from './generic-sorter';
4
- import { columnSymbol } from './use-dom-columns';
5
- import { useHashState } from './use-hash-state';
6
- import { indexSymbol } from './utils';
7
-
8
- const sortBy = (valueFn, descending) => (a, b) =>
9
- genericSorter(valueFn(a), valueFn(b)) * (descending ? -1 : 1),
10
- kebab = (input) =>
11
- input.replace(/([a-z0-9])([A-Z])/gu, '$1-$2').toLowerCase(),
12
- notifyChanges = (column, changes) => {
13
- if (!column || !changes) {
14
- return;
15
- }
16
-
17
- Object.entries(changes).forEach(([key, value]) => {
18
- column[columnSymbol].__ownChange = true;
19
- column[columnSymbol][key] = value;
20
- column[columnSymbol].__ownChange = false;
21
- column[columnSymbol].dispatchEvent(
22
- new CustomEvent(`${kebab(key)}-changed`, {
23
- bubbles: true,
24
- detail: { value },
25
- }),
26
- );
27
- });
28
- },
29
- assignIndex = (item, index) => Object.assign(item, { [indexSymbol]: index }),
30
- unparsed = Symbol('unparsed');
31
-
32
- export const useProcessedItems = ({
33
- data,
34
- columns,
35
- hashParam,
36
- sortAndGroupOptions,
37
- noLocalSort,
38
- noLocalFilter,
39
- }) => {
40
- const { groupOnColumn, groupOnDescending, sortOnColumn, descending } =
41
- sortAndGroupOptions,
42
- write = useCallback(
43
- ([filter, value]) => {
44
- const column = columns.find(({ name }) => name === filter);
45
- if (column == null) {
46
- return [filter, undefined];
47
- }
48
- return [
49
- filter,
50
- value.filter && column.serializeFilter(column, value.filter),
51
- ];
52
- },
53
- [columns],
54
- ),
55
- read = useCallback(
56
- ([filter, value]) => {
57
- const column = columns.find(({ name }) => name === filter);
58
- if (column == null) {
59
- return [filter, { [unparsed]: value }];
60
- }
61
-
62
- const state = { filter: column.deserializeFilter(column, value) };
63
- notifyChanges(column, state);
64
- return [filter, state];
65
- },
66
- [columns],
67
- ),
68
- [filters, setFilters] = useHashState({}, hashParam, {
69
- multi: true,
70
- suffix: '-filter--',
71
- write,
72
- read,
73
- }),
74
- // TODO: drop extra info from state
75
- setFilterState = useCallback(
76
- (name, state) =>
77
- setFilters((filters) => {
78
- const newState = invoke(state, filters[name]);
79
-
80
- notifyChanges(
81
- columns.find((c) => c.name === name),
82
- newState,
83
- );
84
-
85
- return { ...filters, [name]: { ...filters[name], ...newState } };
86
- }),
87
- [columns, setFilters],
88
- ),
89
- filterValues = useMemo(
90
- () => Object.values(filters).map((f) => f.filter),
91
- [filters],
92
- ),
93
- filterFunctions = useMemo(() => {
94
- return Object.fromEntries(
95
- columns
96
- .map((col) => [
97
- col.name,
98
- !col.noLocalFilter &&
99
- col.getFilterFn(col, filters[col.name]?.filter),
100
- ])
101
- .filter(([, fn]) => !!fn),
102
- );
103
- }, [columns, ...filterValues]),
104
- filteredItems = useMemo(() => {
105
- if (!Array.isArray(data) || data.length === 0) {
106
- return [];
107
- }
108
-
109
- if (Object.entries(filterFunctions).length === 0 || noLocalFilter) {
110
- return data.slice();
111
- }
112
-
113
- return data.filter((item) =>
114
- Object.values(filterFunctions).every((filterFn) => filterFn(item)),
115
- );
116
- }, [data, filterFunctions, noLocalFilter]),
117
- // todo: extract function
118
-
119
- processedItems = useMemo(() => {
120
- if (
121
- !noLocalSort &&
122
- !groupOnColumn &&
123
- sortOnColumn != null &&
124
- sortOnColumn.sortOn != null
125
- ) {
126
- return filteredItems
127
- .slice()
128
- .sort(
129
- sortBy(
130
- (a) =>
131
- sortOnColumn.getComparableValue(
132
- { ...sortOnColumn, valuePath: sortOnColumn.sortOn },
133
- a,
134
- ),
135
- descending,
136
- ),
137
- );
138
- }
139
-
140
- if (groupOnColumn != null && groupOnColumn.groupOn != null) {
141
- const groupedResults = filteredItems.reduce((acc, item) => {
142
- const gval = groupOnColumn.getComparableValue(
143
- { ...groupOnColumn, valuePath: groupOnColumn.groupOn },
144
- item,
145
- );
146
-
147
- if (gval === undefined) {
148
- return acc;
149
- }
150
-
151
- let group = acc.find((g) => g.id === gval);
152
-
153
- if (!group) {
154
- group = { id: gval, name: gval, items: [item] };
155
- return [...acc, group];
156
- }
157
-
158
- group.items.push(item);
159
- return acc;
160
- }, []);
161
-
162
- groupedResults.sort(
163
- sortBy(
164
- (a) =>
165
- groupOnColumn.getComparableValue(
166
- { ...groupOnColumn, valuePath: groupOnColumn.groupOn },
167
- a.items[0],
168
- ),
169
- groupOnDescending,
170
- ),
171
- );
172
-
173
- if (!sortOnColumn || noLocalSort) {
174
- return groupedResults;
175
- }
176
-
177
- return groupedResults
178
- .filter((group) => Array.isArray(group.items))
179
- .map((group) => {
180
- group.items.sort(
181
- sortBy(
182
- (a) =>
183
- sortOnColumn.getComparableValue(
184
- { ...sortOnColumn, valuePath: sortOnColumn.sortOn },
185
- a,
186
- ),
187
- descending,
188
- ),
189
- );
190
- return group;
191
- });
192
- }
193
-
194
- return filteredItems;
195
- }, [
196
- filteredItems,
197
- groupOnColumn,
198
- groupOnDescending,
199
- sortOnColumn,
200
- descending,
201
- noLocalSort,
202
- ]),
203
- visibleData = useMemo(() => {
204
- let index = 0,
205
- groupIndex = 0;
206
- const result = [];
207
- processedItems.forEach((item) => {
208
- if (Array.isArray(item.items)) {
209
- assignIndex(item, groupIndex++);
210
- item.items.forEach((groupItem) => {
211
- assignIndex(groupItem, index++);
212
- result.push(groupItem);
213
- });
214
- return;
215
- }
216
-
217
- assignIndex(item, index++);
218
- return result.push(item);
219
- }, []);
220
- return result;
221
- }, [processedItems]);
222
-
223
- // parse un-parsed filter values
224
- // filters can be left un-parsed if a column was not defined when the URL is read
225
- useEffect(() => {
226
- setFilters((filters) => {
227
- const hasUnparsedFilters = Object.values(filters).some(
228
- (value) => value[unparsed] != null,
229
- );
230
-
231
- if (!hasUnparsedFilters) {
232
- return filters;
233
- }
234
-
235
- return Object.fromEntries(
236
- Object.entries(filters).map(([name, value]) => {
237
- if (value[unparsed] == null) {
238
- return [name, value];
239
- }
240
-
241
- return read([name, value[unparsed]]);
242
- }),
243
- );
244
- });
245
- }, [read]);
246
-
247
- return {
248
- processedItems,
249
- visibleData,
250
- filters,
251
- filterFunctions,
252
- setFilterState,
253
- };
254
- };