@vuu-ui/vuu-table 0.8.35 → 0.8.36

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 (223) hide show
  1. package/README.md +0 -0
  2. package/cjs/Row.css.js +6 -0
  3. package/cjs/Row.css.js.map +1 -0
  4. package/cjs/Row.js +124 -0
  5. package/cjs/Row.js.map +1 -0
  6. package/cjs/Table.css.js +6 -0
  7. package/cjs/Table.css.js.map +1 -0
  8. package/cjs/Table.js +285 -0
  9. package/cjs/Table.js.map +1 -0
  10. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js +6 -0
  11. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +1 -0
  12. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +42 -0
  13. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -0
  14. package/cjs/cell-renderers/input-cell/InputCell.css.js +6 -0
  15. package/cjs/cell-renderers/input-cell/InputCell.css.js.map +1 -0
  16. package/cjs/cell-renderers/input-cell/InputCell.js +58 -0
  17. package/cjs/cell-renderers/input-cell/InputCell.js.map +1 -0
  18. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js +6 -0
  19. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js.map +1 -0
  20. package/cjs/cell-renderers/toggle-cell/ToggleCell.js +68 -0
  21. package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +1 -0
  22. package/cjs/column-header-pill/ColumnHeaderPill.css.js +6 -0
  23. package/cjs/column-header-pill/ColumnHeaderPill.css.js.map +1 -0
  24. package/cjs/column-header-pill/ColumnHeaderPill.js +53 -0
  25. package/cjs/column-header-pill/ColumnHeaderPill.js.map +1 -0
  26. package/cjs/column-header-pill/GroupColumnPill.css.js +6 -0
  27. package/cjs/column-header-pill/GroupColumnPill.css.js.map +1 -0
  28. package/cjs/column-header-pill/GroupColumnPill.js +29 -0
  29. package/cjs/column-header-pill/GroupColumnPill.js.map +1 -0
  30. package/cjs/column-header-pill/SortIndicator.css.js +6 -0
  31. package/cjs/column-header-pill/SortIndicator.css.js.map +1 -0
  32. package/cjs/column-header-pill/SortIndicator.js +27 -0
  33. package/cjs/column-header-pill/SortIndicator.js.map +1 -0
  34. package/cjs/column-menu/ColumnMenu.css.js +6 -0
  35. package/cjs/column-menu/ColumnMenu.css.js.map +1 -0
  36. package/cjs/column-menu/ColumnMenu.js +30 -0
  37. package/cjs/column-menu/ColumnMenu.js.map +1 -0
  38. package/cjs/column-resizing/ColumnResizer.css.js +6 -0
  39. package/cjs/column-resizing/ColumnResizer.css.js.map +1 -0
  40. package/cjs/column-resizing/ColumnResizer.js +72 -0
  41. package/cjs/column-resizing/ColumnResizer.js.map +1 -0
  42. package/cjs/column-resizing/useTableColumnResize.js +55 -0
  43. package/cjs/column-resizing/useTableColumnResize.js.map +1 -0
  44. package/cjs/context-menu/buildContextMenuDescriptors.js +214 -0
  45. package/cjs/context-menu/buildContextMenuDescriptors.js.map +1 -0
  46. package/cjs/context-menu/useHandleTableContextMenu.js +81 -0
  47. package/cjs/context-menu/useHandleTableContextMenu.js.map +1 -0
  48. package/cjs/header-cell/GroupHeaderCell.css.js +6 -0
  49. package/cjs/header-cell/GroupHeaderCell.css.js.map +1 -0
  50. package/cjs/header-cell/GroupHeaderCell.js +117 -0
  51. package/cjs/header-cell/GroupHeaderCell.js.map +1 -0
  52. package/cjs/header-cell/HeaderCell.css.js +6 -0
  53. package/cjs/header-cell/HeaderCell.css.js.map +1 -0
  54. package/cjs/header-cell/HeaderCell.js +109 -0
  55. package/cjs/header-cell/HeaderCell.js.map +1 -0
  56. package/cjs/index.js.map +1 -0
  57. package/cjs/moving-window.js +61 -0
  58. package/cjs/moving-window.js.map +1 -0
  59. package/cjs/table-cell/TableCell.css.js +6 -0
  60. package/cjs/table-cell/TableCell.css.js.map +1 -0
  61. package/cjs/table-cell/TableCell.js +72 -0
  62. package/cjs/table-cell/TableCell.js.map +1 -0
  63. package/cjs/table-cell/TableGroupCell.css.js +6 -0
  64. package/cjs/table-cell/TableGroupCell.css.js.map +1 -0
  65. package/cjs/table-cell/TableGroupCell.js +54 -0
  66. package/cjs/table-cell/TableGroupCell.js.map +1 -0
  67. package/cjs/table-config.js +25 -0
  68. package/cjs/table-config.js.map +1 -0
  69. package/cjs/table-dom-utils.js +60 -0
  70. package/cjs/table-dom-utils.js.map +1 -0
  71. package/cjs/table-header/TableHeader.js +87 -0
  72. package/cjs/table-header/TableHeader.js.map +1 -0
  73. package/cjs/table-header/useTableHeader.js +72 -0
  74. package/cjs/table-header/useTableHeader.js.map +1 -0
  75. package/cjs/useCell.js +28 -0
  76. package/cjs/useCell.js.map +1 -0
  77. package/cjs/useCellEditing.js +79 -0
  78. package/cjs/useCellEditing.js.map +1 -0
  79. package/cjs/useControlledTableNavigation.js +43 -0
  80. package/cjs/useControlledTableNavigation.js.map +1 -0
  81. package/cjs/useDataSource.js +104 -0
  82. package/cjs/useDataSource.js.map +1 -0
  83. package/cjs/useInitialValue.js +11 -0
  84. package/cjs/useInitialValue.js.map +1 -0
  85. package/cjs/useKeyboardNavigation.js +304 -0
  86. package/cjs/useKeyboardNavigation.js.map +1 -0
  87. package/cjs/useRowClassNameGenerators.js +34 -0
  88. package/cjs/useRowClassNameGenerators.js.map +1 -0
  89. package/cjs/useRowHeight.js +43 -0
  90. package/cjs/useRowHeight.js.map +1 -0
  91. package/cjs/useSelection.js +64 -0
  92. package/cjs/useSelection.js.map +1 -0
  93. package/cjs/useTable.js +553 -0
  94. package/cjs/useTable.js.map +1 -0
  95. package/cjs/useTableAndColumnSettings.js +128 -0
  96. package/cjs/useTableAndColumnSettings.js.map +1 -0
  97. package/cjs/useTableContextMenu.js +42 -0
  98. package/cjs/useTableContextMenu.js.map +1 -0
  99. package/cjs/useTableModel.js +297 -0
  100. package/cjs/useTableModel.js.map +1 -0
  101. package/cjs/useTableScroll.js +396 -0
  102. package/cjs/useTableScroll.js.map +1 -0
  103. package/cjs/useTableViewport.js +122 -0
  104. package/cjs/useTableViewport.js.map +1 -0
  105. package/esm/Row.css.js +4 -0
  106. package/esm/Row.css.js.map +1 -0
  107. package/esm/Row.js +121 -0
  108. package/esm/Row.js.map +1 -0
  109. package/esm/Table.css.js +4 -0
  110. package/esm/Table.css.js.map +1 -0
  111. package/esm/Table.js +283 -0
  112. package/esm/Table.js.map +1 -0
  113. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js +4 -0
  114. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +1 -0
  115. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +40 -0
  116. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -0
  117. package/esm/cell-renderers/input-cell/InputCell.css.js +4 -0
  118. package/esm/cell-renderers/input-cell/InputCell.css.js.map +1 -0
  119. package/esm/cell-renderers/input-cell/InputCell.js +56 -0
  120. package/esm/cell-renderers/input-cell/InputCell.js.map +1 -0
  121. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js +4 -0
  122. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js.map +1 -0
  123. package/esm/cell-renderers/toggle-cell/ToggleCell.js +66 -0
  124. package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +1 -0
  125. package/esm/column-header-pill/ColumnHeaderPill.css.js +4 -0
  126. package/esm/column-header-pill/ColumnHeaderPill.css.js.map +1 -0
  127. package/esm/column-header-pill/ColumnHeaderPill.js +51 -0
  128. package/esm/column-header-pill/ColumnHeaderPill.js.map +1 -0
  129. package/esm/column-header-pill/GroupColumnPill.css.js +4 -0
  130. package/esm/column-header-pill/GroupColumnPill.css.js.map +1 -0
  131. package/esm/column-header-pill/GroupColumnPill.js +27 -0
  132. package/esm/column-header-pill/GroupColumnPill.js.map +1 -0
  133. package/esm/column-header-pill/SortIndicator.css.js +4 -0
  134. package/esm/column-header-pill/SortIndicator.css.js.map +1 -0
  135. package/esm/column-header-pill/SortIndicator.js +25 -0
  136. package/esm/column-header-pill/SortIndicator.js.map +1 -0
  137. package/esm/column-menu/ColumnMenu.css.js +4 -0
  138. package/esm/column-menu/ColumnMenu.css.js.map +1 -0
  139. package/esm/column-menu/ColumnMenu.js +28 -0
  140. package/esm/column-menu/ColumnMenu.js.map +1 -0
  141. package/esm/column-resizing/ColumnResizer.css.js +4 -0
  142. package/esm/column-resizing/ColumnResizer.css.js.map +1 -0
  143. package/esm/column-resizing/ColumnResizer.js +70 -0
  144. package/esm/column-resizing/ColumnResizer.js.map +1 -0
  145. package/esm/column-resizing/useTableColumnResize.js +53 -0
  146. package/esm/column-resizing/useTableColumnResize.js.map +1 -0
  147. package/esm/context-menu/buildContextMenuDescriptors.js +212 -0
  148. package/esm/context-menu/buildContextMenuDescriptors.js.map +1 -0
  149. package/esm/context-menu/useHandleTableContextMenu.js +79 -0
  150. package/esm/context-menu/useHandleTableContextMenu.js.map +1 -0
  151. package/esm/header-cell/GroupHeaderCell.css.js +4 -0
  152. package/esm/header-cell/GroupHeaderCell.css.js.map +1 -0
  153. package/esm/header-cell/GroupHeaderCell.js +115 -0
  154. package/esm/header-cell/GroupHeaderCell.js.map +1 -0
  155. package/esm/header-cell/HeaderCell.css.js +4 -0
  156. package/esm/header-cell/HeaderCell.css.js.map +1 -0
  157. package/esm/header-cell/HeaderCell.js +107 -0
  158. package/esm/header-cell/HeaderCell.js.map +1 -0
  159. package/esm/index.js +14 -0
  160. package/esm/index.js.map +1 -0
  161. package/esm/moving-window.js +59 -0
  162. package/esm/moving-window.js.map +1 -0
  163. package/esm/table-cell/TableCell.css.js +4 -0
  164. package/esm/table-cell/TableCell.css.js.map +1 -0
  165. package/esm/table-cell/TableCell.js +70 -0
  166. package/esm/table-cell/TableCell.js.map +1 -0
  167. package/esm/table-cell/TableGroupCell.css.js +4 -0
  168. package/esm/table-cell/TableGroupCell.css.js.map +1 -0
  169. package/esm/table-cell/TableGroupCell.js +52 -0
  170. package/esm/table-cell/TableGroupCell.js.map +1 -0
  171. package/esm/table-config.js +23 -0
  172. package/esm/table-config.js.map +1 -0
  173. package/esm/table-dom-utils.js +51 -0
  174. package/esm/table-dom-utils.js.map +1 -0
  175. package/esm/table-header/TableHeader.js +85 -0
  176. package/esm/table-header/TableHeader.js.map +1 -0
  177. package/esm/table-header/useTableHeader.js +70 -0
  178. package/esm/table-header/useTableHeader.js.map +1 -0
  179. package/esm/useCell.js +26 -0
  180. package/esm/useCell.js.map +1 -0
  181. package/esm/useCellEditing.js +77 -0
  182. package/esm/useCellEditing.js.map +1 -0
  183. package/esm/useControlledTableNavigation.js +41 -0
  184. package/esm/useControlledTableNavigation.js.map +1 -0
  185. package/esm/useDataSource.js +101 -0
  186. package/esm/useDataSource.js.map +1 -0
  187. package/esm/useInitialValue.js +9 -0
  188. package/esm/useInitialValue.js.map +1 -0
  189. package/esm/useKeyboardNavigation.js +300 -0
  190. package/esm/useKeyboardNavigation.js.map +1 -0
  191. package/esm/useRowClassNameGenerators.js +32 -0
  192. package/esm/useRowClassNameGenerators.js.map +1 -0
  193. package/esm/useRowHeight.js +41 -0
  194. package/esm/useRowHeight.js.map +1 -0
  195. package/esm/useSelection.js +62 -0
  196. package/esm/useSelection.js.map +1 -0
  197. package/esm/useTable.js +551 -0
  198. package/esm/useTable.js.map +1 -0
  199. package/esm/useTableAndColumnSettings.js +126 -0
  200. package/esm/useTableAndColumnSettings.js.map +1 -0
  201. package/esm/useTableContextMenu.js +40 -0
  202. package/esm/useTableContextMenu.js.map +1 -0
  203. package/esm/useTableModel.js +293 -0
  204. package/esm/useTableModel.js.map +1 -0
  205. package/esm/useTableScroll.js +393 -0
  206. package/esm/useTableScroll.js.map +1 -0
  207. package/esm/useTableViewport.js +120 -0
  208. package/esm/useTableViewport.js.map +1 -0
  209. package/package.json +12 -8
  210. package/types/Row.d.ts +0 -1
  211. package/types/Table.d.ts +0 -1
  212. package/types/cell-renderers/checkbox-cell/CheckboxCell.d.ts +0 -1
  213. package/types/cell-renderers/input-cell/InputCell.d.ts +0 -1
  214. package/types/cell-renderers/toggle-cell/ToggleCell.d.ts +0 -1
  215. package/types/column-header-pill/ColumnHeaderPill.d.ts +0 -1
  216. package/types/column-header-pill/GroupColumnPill.d.ts +0 -1
  217. package/types/column-header-pill/SortIndicator.d.ts +0 -1
  218. package/types/column-menu/ColumnMenu.d.ts +0 -1
  219. package/types/column-resizing/ColumnResizer.d.ts +0 -1
  220. package/types/header-cell/GroupHeaderCell.d.ts +0 -1
  221. package/types/header-cell/HeaderCell.d.ts +0 -1
  222. package/types/table-cell/TableCell.d.ts +0 -1
  223. package/types/table-cell/TableGroupCell.d.ts +0 -1
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var vuuUtils = require('@vuu-ui/vuu-utils');
4
+ var react = require('react');
5
+
6
+ const createClassNameGenerator = (ids) => {
7
+ const functions = [];
8
+ ids?.forEach((id) => {
9
+ const fn = vuuUtils.getRowClassNameGenerator(id);
10
+ if (fn) {
11
+ functions.push(fn.fn);
12
+ }
13
+ });
14
+ return (row, columnMap) => {
15
+ const classNames = [];
16
+ functions?.forEach((fn) => {
17
+ const className = fn(row, columnMap);
18
+ if (className) {
19
+ classNames.push(className);
20
+ }
21
+ });
22
+ return classNames.join(" ");
23
+ };
24
+ };
25
+ const useRowClassNameGenerators = ({
26
+ rowClassNameGenerators
27
+ }) => {
28
+ return react.useMemo(() => {
29
+ return createClassNameGenerator(rowClassNameGenerators);
30
+ }, [rowClassNameGenerators]);
31
+ };
32
+
33
+ exports.useRowClassNameGenerators = useRowClassNameGenerators;
34
+ //# sourceMappingURL=useRowClassNameGenerators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRowClassNameGenerators.js","sources":["../src/useRowClassNameGenerators.ts"],"sourcesContent":["import { TableConfig } from \"@vuu-ui/vuu-table-types\";\nimport {\n getRowClassNameGenerator,\n RowClassNameGenerator,\n} from \"@vuu-ui/vuu-utils\";\nimport { useMemo } from \"react\";\n\nconst createClassNameGenerator = (\n ids?: string[]\n): RowClassNameGenerator | undefined => {\n const functions: RowClassNameGenerator[] = [];\n ids?.forEach((id) => {\n const fn = getRowClassNameGenerator(id);\n if (fn) {\n functions.push(fn.fn);\n }\n });\n return (row, columnMap) => {\n const classNames: string[] = [];\n functions?.forEach((fn) => {\n const className = fn(row, columnMap);\n if (className) {\n classNames.push(className);\n }\n });\n return classNames.join(\" \");\n };\n};\n\nexport const useRowClassNameGenerators = ({\n rowClassNameGenerators,\n}: TableConfig) => {\n return useMemo<RowClassNameGenerator | undefined>(() => {\n return createClassNameGenerator(rowClassNameGenerators);\n }, [rowClassNameGenerators]);\n};\n"],"names":["getRowClassNameGenerator","useMemo"],"mappings":";;;;;AAOA,MAAM,wBAAA,GAA2B,CAC/B,GACsC,KAAA;AACtC,EAAA,MAAM,YAAqC,EAAC,CAAA;AAC5C,EAAK,GAAA,EAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AACnB,IAAM,MAAA,EAAA,GAAKA,kCAAyB,EAAE,CAAA,CAAA;AACtC,IAAA,IAAI,EAAI,EAAA;AACN,MAAU,SAAA,CAAA,IAAA,CAAK,GAAG,EAAE,CAAA,CAAA;AAAA,KACtB;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA,CAAC,KAAK,SAAc,KAAA;AACzB,IAAA,MAAM,aAAuB,EAAC,CAAA;AAC9B,IAAW,SAAA,EAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AACzB,MAAM,MAAA,SAAA,GAAY,EAAG,CAAA,GAAA,EAAK,SAAS,CAAA,CAAA;AACnC,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,UAAA,CAAW,KAAK,SAAS,CAAA,CAAA;AAAA,OAC3B;AAAA,KACD,CAAA,CAAA;AACD,IAAO,OAAA,UAAA,CAAW,KAAK,GAAG,CAAA,CAAA;AAAA,GAC5B,CAAA;AACF,CAAA,CAAA;AAEO,MAAM,4BAA4B,CAAC;AAAA,EACxC,sBAAA;AACF,CAAmB,KAAA;AACjB,EAAA,OAAOC,cAA2C,MAAM;AACtD,IAAA,OAAO,yBAAyB,sBAAsB,CAAA,CAAA;AAAA,GACxD,EAAG,CAAC,sBAAsB,CAAC,CAAA,CAAA;AAC7B;;;;"}
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ var vuuUtils = require('@vuu-ui/vuu-utils');
4
+ var react = require('react');
5
+
6
+ const useRowHeight = ({
7
+ rowHeight: rowHeightProp = 0
8
+ }) => {
9
+ const [rowHeight, setRowHeight] = react.useState(rowHeightProp);
10
+ const heightRef = react.useRef(rowHeight);
11
+ const resizeObserver = react.useMemo(() => {
12
+ return new ResizeObserver((entries) => {
13
+ for (const entry of entries) {
14
+ const [{ blockSize: measuredSize }] = entry.borderBoxSize;
15
+ const newHeight = Math.round(measuredSize);
16
+ if (vuuUtils.isValidNumber(newHeight) && heightRef.current !== newHeight) {
17
+ heightRef.current = newHeight;
18
+ setRowHeight(newHeight);
19
+ }
20
+ }
21
+ });
22
+ }, []);
23
+ const rowRef = react.useCallback(
24
+ (el) => {
25
+ if (el) {
26
+ if (rowHeightProp === 0) {
27
+ const { height } = el.getBoundingClientRect();
28
+ console.log({ boundingClientHeight: height });
29
+ console.log(`measured rowHeight = ${height} (${rowHeightProp})`);
30
+ resizeObserver.observe(el);
31
+ setRowHeight(height);
32
+ }
33
+ } else {
34
+ resizeObserver.disconnect();
35
+ }
36
+ },
37
+ [resizeObserver, rowHeightProp]
38
+ );
39
+ return { rowHeight, rowRef };
40
+ };
41
+
42
+ exports.useRowHeight = useRowHeight;
43
+ //# sourceMappingURL=useRowHeight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRowHeight.js","sources":["../src/useRowHeight.ts"],"sourcesContent":["import { isValidNumber } from \"@vuu-ui/vuu-utils\";\nimport { RefCallback, useCallback, useMemo, useRef, useState } from \"react\";\n\ninterface RowHeightHookProps {\n rowHeight?: number;\n}\n\nexport const useRowHeight = ({\n rowHeight: rowHeightProp = 0,\n}: RowHeightHookProps) => {\n const [rowHeight, setRowHeight] = useState(rowHeightProp);\n const heightRef = useRef(rowHeight);\n\n const resizeObserver = useMemo(() => {\n return new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const [{ blockSize: measuredSize }] = entry.borderBoxSize;\n const newHeight = Math.round(measuredSize);\n if (isValidNumber(newHeight) && heightRef.current !== newHeight) {\n heightRef.current = newHeight;\n setRowHeight(newHeight);\n }\n }\n });\n }, []);\n\n const rowRef = useCallback<RefCallback<HTMLDivElement>>(\n (el) => {\n if (el) {\n if (rowHeightProp === 0) {\n const { height } = el.getBoundingClientRect();\n console.log({ boundingClientHeight: height });\n console.log(`measured rowHeight = ${height} (${rowHeightProp})`);\n resizeObserver.observe(el);\n setRowHeight(height);\n }\n } else {\n resizeObserver.disconnect();\n }\n },\n [resizeObserver, rowHeightProp]\n );\n\n return { rowHeight, rowRef };\n};\n"],"names":["useState","useRef","useMemo","isValidNumber","useCallback"],"mappings":";;;;;AAOO,MAAM,eAAe,CAAC;AAAA,EAC3B,WAAW,aAAgB,GAAA,CAAA;AAC7B,CAA0B,KAAA;AACxB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,aAAa,CAAA,CAAA;AACxD,EAAM,MAAA,SAAA,GAAYC,aAAO,SAAS,CAAA,CAAA;AAElC,EAAM,MAAA,cAAA,GAAiBC,cAAQ,MAAM;AACnC,IAAO,OAAA,IAAI,cAAe,CAAA,CAAC,OAAmC,KAAA;AAC5D,MAAA,KAAA,MAAW,SAAS,OAAS,EAAA;AAC3B,QAAA,MAAM,CAAC,EAAE,SAAA,EAAW,YAAa,EAAC,IAAI,KAAM,CAAA,aAAA,CAAA;AAC5C,QAAM,MAAA,SAAA,GAAY,IAAK,CAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AACzC,QAAA,IAAIC,sBAAc,CAAA,SAAS,CAAK,IAAA,SAAA,CAAU,YAAY,SAAW,EAAA;AAC/D,UAAA,SAAA,CAAU,OAAU,GAAA,SAAA,CAAA;AACpB,UAAA,YAAA,CAAa,SAAS,CAAA,CAAA;AAAA,SACxB;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH,EAAG,EAAE,CAAA,CAAA;AAEL,EAAA,MAAM,MAAS,GAAAC,iBAAA;AAAA,IACb,CAAC,EAAO,KAAA;AACN,MAAA,IAAI,EAAI,EAAA;AACN,QAAA,IAAI,kBAAkB,CAAG,EAAA;AACvB,UAAA,MAAM,EAAE,MAAA,EAAW,GAAA,EAAA,CAAG,qBAAsB,EAAA,CAAA;AAC5C,UAAA,OAAA,CAAQ,GAAI,CAAA,EAAE,oBAAsB,EAAA,MAAA,EAAQ,CAAA,CAAA;AAC5C,UAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,qBAAA,EAAwB,MAAM,CAAA,EAAA,EAAK,aAAa,CAAG,CAAA,CAAA,CAAA,CAAA;AAC/D,UAAA,cAAA,CAAe,QAAQ,EAAE,CAAA,CAAA;AACzB,UAAA,YAAA,CAAa,MAAM,CAAA,CAAA;AAAA,SACrB;AAAA,OACK,MAAA;AACL,QAAA,cAAA,CAAe,UAAW,EAAA,CAAA;AAAA,OAC5B;AAAA,KACF;AAAA,IACA,CAAC,gBAAgB,aAAa,CAAA;AAAA,GAChC,CAAA;AAEA,EAAO,OAAA,EAAE,WAAW,MAAO,EAAA,CAAA;AAC7B;;;;"}
@@ -0,0 +1,64 @@
1
+ 'use strict';
2
+
3
+ var vuuUtils = require('@vuu-ui/vuu-utils');
4
+ var react = require('react');
5
+
6
+ const { IDX } = vuuUtils.metadataKeys;
7
+ const NO_SELECTION = [];
8
+ const defaultSelectionKeys = ["Enter", " "];
9
+ const useSelection = ({
10
+ highlightedIndexRef,
11
+ selectionKeys = defaultSelectionKeys,
12
+ selectionModel,
13
+ onSelect,
14
+ onSelectionChange
15
+ }) => {
16
+ const lastActiveRef = react.useRef(-1);
17
+ const selectedRef = react.useRef(NO_SELECTION);
18
+ const isSelectionEvent = react.useCallback(
19
+ (evt) => selectionKeys.includes(evt.key),
20
+ [selectionKeys]
21
+ );
22
+ const handleRowClick = react.useCallback(
23
+ (evt, row, rangeSelect, keepExistingSelection) => {
24
+ const { [IDX]: idx } = row;
25
+ const { current: active } = lastActiveRef;
26
+ const { current: selected } = selectedRef;
27
+ const selectOperation = vuuUtils.isRowSelected(row) ? vuuUtils.deselectItem : vuuUtils.selectItem;
28
+ const newSelected = selectOperation(
29
+ selectionModel,
30
+ selected,
31
+ idx,
32
+ rangeSelect,
33
+ keepExistingSelection,
34
+ active
35
+ );
36
+ selectedRef.current = newSelected;
37
+ lastActiveRef.current = idx;
38
+ onSelect?.(selectOperation === vuuUtils.selectItem ? row : null);
39
+ onSelectionChange?.(newSelected);
40
+ },
41
+ [onSelect, onSelectionChange, selectionModel]
42
+ );
43
+ const handleKeyDown = react.useCallback(
44
+ (e) => {
45
+ if (isSelectionEvent(e)) {
46
+ const { current: rowIndex } = highlightedIndexRef;
47
+ if (rowIndex !== void 0 && rowIndex !== -1) {
48
+ const rowEl = vuuUtils.getRowElementAtIndex(e.target, rowIndex);
49
+ if (rowEl) {
50
+ vuuUtils.dispatchMouseEvent(rowEl, "click");
51
+ }
52
+ }
53
+ }
54
+ },
55
+ [highlightedIndexRef, isSelectionEvent]
56
+ );
57
+ return {
58
+ onKeyDown: handleKeyDown,
59
+ onRowClick: handleRowClick
60
+ };
61
+ };
62
+
63
+ exports.useSelection = useSelection;
64
+ //# sourceMappingURL=useSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSelection.js","sources":["../src/useSelection.ts"],"sourcesContent":["import {\n TableRowClickHandlerInternal,\n TableRowSelectHandlerInternal,\n TableSelectionModel,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n deselectItem,\n dispatchMouseEvent,\n getRowElementAtIndex,\n isRowSelected,\n metadataKeys,\n selectItem,\n} from \"@vuu-ui/vuu-utils\";\nimport { Selection, SelectionChangeHandler } from \"@vuu-ui/vuu-data-types\";\nimport {\n KeyboardEvent,\n KeyboardEventHandler,\n MutableRefObject,\n useCallback,\n useRef,\n} from \"react\";\n\nconst { IDX } = metadataKeys;\n\nconst NO_SELECTION: Selection = [];\n\nconst defaultSelectionKeys = [\"Enter\", \" \"];\n\nexport interface SelectionHookProps {\n highlightedIndexRef: MutableRefObject<number | undefined>;\n selectionKeys?: string[];\n selectionModel: TableSelectionModel;\n onSelect?: TableRowSelectHandlerInternal;\n onSelectionChange: SelectionChangeHandler;\n}\n\nexport const useSelection = ({\n highlightedIndexRef,\n selectionKeys = defaultSelectionKeys,\n selectionModel,\n onSelect,\n onSelectionChange,\n}: SelectionHookProps) => {\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const lastActiveRef = useRef(-1);\n const selectedRef = useRef<Selection>(NO_SELECTION);\n\n const isSelectionEvent = useCallback(\n (evt: KeyboardEvent<HTMLElement>) => selectionKeys.includes(evt.key),\n [selectionKeys]\n );\n\n const handleRowClick = useCallback<TableRowClickHandlerInternal>(\n (evt, row, rangeSelect, keepExistingSelection) => {\n const { [IDX]: idx } = row;\n const { current: active } = lastActiveRef;\n const { current: selected } = selectedRef;\n\n const selectOperation = isRowSelected(row) ? deselectItem : selectItem;\n\n const newSelected = selectOperation(\n selectionModel,\n selected,\n idx,\n rangeSelect,\n keepExistingSelection,\n active\n );\n\n selectedRef.current = newSelected;\n lastActiveRef.current = idx;\n\n onSelect?.(selectOperation === selectItem ? row : null);\n onSelectionChange?.(newSelected);\n },\n [onSelect, onSelectionChange, selectionModel]\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLElement>>(\n (e) => {\n if (isSelectionEvent(e)) {\n const { current: rowIndex } = highlightedIndexRef;\n if (rowIndex !== undefined && rowIndex !== -1) {\n const rowEl = getRowElementAtIndex(e.target, rowIndex);\n // const rowEl = (e.target as HTMLElement).querySelector(\n // `[aria-rowindex=\"${rowIndex + 1}\"]`\n // ) as HTMLElement;\n if (rowEl) {\n dispatchMouseEvent(rowEl, \"click\");\n }\n }\n }\n },\n [highlightedIndexRef, isSelectionEvent]\n );\n\n return {\n onKeyDown: handleKeyDown,\n onRowClick: handleRowClick,\n };\n};\n"],"names":["metadataKeys","useRef","useCallback","isRowSelected","deselectItem","selectItem","getRowElementAtIndex","dispatchMouseEvent"],"mappings":";;;;;AAsBA,MAAM,EAAE,KAAQ,GAAAA,qBAAA,CAAA;AAEhB,MAAM,eAA0B,EAAC,CAAA;AAEjC,MAAM,oBAAA,GAAuB,CAAC,OAAA,EAAS,GAAG,CAAA,CAAA;AAUnC,MAAM,eAAe,CAAC;AAAA,EAC3B,mBAAA;AAAA,EACA,aAAgB,GAAA,oBAAA;AAAA,EAChB,cAAA;AAAA,EACA,QAAA;AAAA,EACA,iBAAA;AACF,CAA0B,KAAA;AAExB,EAAM,MAAA,aAAA,GAAgBC,aAAO,CAAE,CAAA,CAAA,CAAA;AAC/B,EAAM,MAAA,WAAA,GAAcA,aAAkB,YAAY,CAAA,CAAA;AAElD,EAAA,MAAM,gBAAmB,GAAAC,iBAAA;AAAA,IACvB,CAAC,GAAA,KAAoC,aAAc,CAAA,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,IACnE,CAAC,aAAa,CAAA;AAAA,GAChB,CAAA;AAEA,EAAA,MAAM,cAAiB,GAAAA,iBAAA;AAAA,IACrB,CAAC,GAAA,EAAK,GAAK,EAAA,WAAA,EAAa,qBAA0B,KAAA;AAChD,MAAA,MAAM,EAAE,CAAC,GAAG,GAAG,KAAQ,GAAA,GAAA,CAAA;AACvB,MAAM,MAAA,EAAE,OAAS,EAAA,MAAA,EAAW,GAAA,aAAA,CAAA;AAC5B,MAAM,MAAA,EAAE,OAAS,EAAA,QAAA,EAAa,GAAA,WAAA,CAAA;AAE9B,MAAA,MAAM,eAAkB,GAAAC,sBAAA,CAAc,GAAG,CAAA,GAAIC,qBAAe,GAAAC,mBAAA,CAAA;AAE5D,MAAA,MAAM,WAAc,GAAA,eAAA;AAAA,QAClB,cAAA;AAAA,QACA,QAAA;AAAA,QACA,GAAA;AAAA,QACA,WAAA;AAAA,QACA,qBAAA;AAAA,QACA,MAAA;AAAA,OACF,CAAA;AAEA,MAAA,WAAA,CAAY,OAAU,GAAA,WAAA,CAAA;AACtB,MAAA,aAAA,CAAc,OAAU,GAAA,GAAA,CAAA;AAExB,MAAW,QAAA,GAAA,eAAA,KAAoBA,mBAAa,GAAA,GAAA,GAAM,IAAI,CAAA,CAAA;AACtD,MAAA,iBAAA,GAAoB,WAAW,CAAA,CAAA;AAAA,KACjC;AAAA,IACA,CAAC,QAAU,EAAA,iBAAA,EAAmB,cAAc,CAAA;AAAA,GAC9C,CAAA;AAEA,EAAA,MAAM,aAAgB,GAAAH,iBAAA;AAAA,IACpB,CAAC,CAAM,KAAA;AACL,MAAI,IAAA,gBAAA,CAAiB,CAAC,CAAG,EAAA;AACvB,QAAM,MAAA,EAAE,OAAS,EAAA,QAAA,EAAa,GAAA,mBAAA,CAAA;AAC9B,QAAI,IAAA,QAAA,KAAa,KAAa,CAAA,IAAA,QAAA,KAAa,CAAI,CAAA,EAAA;AAC7C,UAAA,MAAM,KAAQ,GAAAI,6BAAA,CAAqB,CAAE,CAAA,MAAA,EAAQ,QAAQ,CAAA,CAAA;AAIrD,UAAA,IAAI,KAAO,EAAA;AACT,YAAAC,2BAAA,CAAmB,OAAO,OAAO,CAAA,CAAA;AAAA,WACnC;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,qBAAqB,gBAAgB,CAAA;AAAA,GACxC,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,SAAW,EAAA,aAAA;AAAA,IACX,UAAY,EAAA,cAAA;AAAA,GACd,CAAA;AACF;;;;"}