@vuu-ui/vuu-table 0.13.114 → 0.13.115-alpha.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 (95) hide show
  1. package/cjs/Row.js +16 -19
  2. package/cjs/Row.js.map +1 -1
  3. package/cjs/Table.js +8 -15
  4. package/cjs/Table.js.map +1 -1
  5. package/cjs/bulk-edit/useBulkEditPanel.js +6 -7
  6. package/cjs/bulk-edit/useBulkEditPanel.js.map +1 -1
  7. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +2 -3
  8. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -1
  9. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +2 -3
  10. package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +1 -1
  11. package/cjs/cell-renderers/input-cell/InputCell.js +3 -5
  12. package/cjs/cell-renderers/input-cell/InputCell.js.map +1 -1
  13. package/cjs/cell-renderers/toggle-cell/ToggleCell.js +5 -6
  14. package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +1 -1
  15. package/cjs/data-row/DataRow.js +146 -0
  16. package/cjs/data-row/DataRow.js.map +1 -0
  17. package/cjs/index.js +2 -0
  18. package/cjs/index.js.map +1 -1
  19. package/cjs/table-cell/TableCell.js +6 -9
  20. package/cjs/table-cell/TableCell.js.map +1 -1
  21. package/cjs/table-cell/TableGroupCell.css.js +1 -1
  22. package/cjs/table-cell/TableGroupCell.js +7 -8
  23. package/cjs/table-cell/TableGroupCell.js.map +1 -1
  24. package/cjs/table-data-source/{moving-window.js → DataRowMovingWindow.js} +19 -29
  25. package/cjs/table-data-source/DataRowMovingWindow.js.map +1 -0
  26. package/cjs/table-data-source/useDataSource.js +77 -37
  27. package/cjs/table-data-source/useDataSource.js.map +1 -1
  28. package/cjs/useRowClassNameGenerators.js +2 -2
  29. package/cjs/useRowClassNameGenerators.js.map +1 -1
  30. package/cjs/useSelection.js +5 -6
  31. package/cjs/useSelection.js.map +1 -1
  32. package/cjs/useTable.js +26 -36
  33. package/cjs/useTable.js.map +1 -1
  34. package/cjs/useTableContextMenu.js +6 -10
  35. package/cjs/useTableContextMenu.js.map +1 -1
  36. package/cjs/useTableScroll.js +0 -1
  37. package/cjs/useTableScroll.js.map +1 -1
  38. package/cjs/useTableViewport.js +2 -2
  39. package/cjs/useTableViewport.js.map +1 -1
  40. package/esm/Row.js +17 -20
  41. package/esm/Row.js.map +1 -1
  42. package/esm/Table.js +9 -16
  43. package/esm/Table.js.map +1 -1
  44. package/esm/bulk-edit/useBulkEditPanel.js +7 -8
  45. package/esm/bulk-edit/useBulkEditPanel.js.map +1 -1
  46. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +2 -3
  47. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -1
  48. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +3 -4
  49. package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +1 -1
  50. package/esm/cell-renderers/input-cell/InputCell.js +3 -5
  51. package/esm/cell-renderers/input-cell/InputCell.js.map +1 -1
  52. package/esm/cell-renderers/toggle-cell/ToggleCell.js +5 -6
  53. package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +1 -1
  54. package/esm/data-row/DataRow.js +144 -0
  55. package/esm/data-row/DataRow.js.map +1 -0
  56. package/esm/index.js +1 -0
  57. package/esm/index.js.map +1 -1
  58. package/esm/table-cell/TableCell.js +6 -9
  59. package/esm/table-cell/TableCell.js.map +1 -1
  60. package/esm/table-cell/TableGroupCell.css.js +1 -1
  61. package/esm/table-cell/TableGroupCell.js +8 -9
  62. package/esm/table-cell/TableGroupCell.js.map +1 -1
  63. package/esm/table-data-source/{moving-window.js → DataRowMovingWindow.js} +20 -30
  64. package/esm/table-data-source/DataRowMovingWindow.js.map +1 -0
  65. package/esm/table-data-source/useDataSource.js +78 -38
  66. package/esm/table-data-source/useDataSource.js.map +1 -1
  67. package/esm/useRowClassNameGenerators.js +2 -2
  68. package/esm/useRowClassNameGenerators.js.map +1 -1
  69. package/esm/useSelection.js +6 -7
  70. package/esm/useSelection.js.map +1 -1
  71. package/esm/useTable.js +27 -37
  72. package/esm/useTable.js.map +1 -1
  73. package/esm/useTableContextMenu.js +7 -11
  74. package/esm/useTableContextMenu.js.map +1 -1
  75. package/esm/useTableScroll.js +0 -1
  76. package/esm/useTableScroll.js.map +1 -1
  77. package/esm/useTableViewport.js +2 -2
  78. package/esm/useTableViewport.js.map +1 -1
  79. package/package.json +10 -10
  80. package/types/Row.d.ts +1 -1
  81. package/types/Table.d.ts +1 -12
  82. package/types/cell-renderers/checkbox-cell/CheckboxCell.d.ts +1 -1
  83. package/types/cell-renderers/input-cell/InputCell.d.ts +1 -1
  84. package/types/data-row/DataRow.d.ts +16 -0
  85. package/types/index.d.ts +1 -0
  86. package/types/table-cell/TableCell.d.ts +1 -1
  87. package/types/table-cell/TableGroupCell.d.ts +1 -1
  88. package/types/table-data-source/DataRowMovingWindow.d.ts +24 -0
  89. package/types/table-data-source/useDataSource.d.ts +5 -6
  90. package/types/useTable.d.ts +5 -7
  91. package/types/useTableContextMenu.d.ts +5 -7
  92. package/types/useTableScroll.d.ts +1 -3
  93. package/cjs/table-data-source/moving-window.js.map +0 -1
  94. package/esm/table-data-source/moving-window.js.map +0 -1
  95. package/types/table-data-source/moving-window.d.ts +0 -23
@@ -1 +1 @@
1
- {"version":3,"file":"InputCell.js","sources":["../../../../../packages/vuu-table/src/cell-renderers/input-cell/InputCell.tsx"],"sourcesContent":["import { Input } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { useEditableText } from \"@vuu-ui/vuu-ui-controls\";\nimport { registerComponent } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\n\nimport inputCellCss from \"./InputCell.css\";\n\nconst classBase = \"vuuTableInputCell\";\n\nexport const InputCell = ({\n column,\n columnMap,\n onEdit,\n row,\n}: TableCellRendererProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-input-cell\",\n css: inputCellCss,\n window: targetWindow,\n });\n\n const dataIdx = columnMap[column.name];\n const dataValue = row[dataIdx] as number | string;\n const { align = \"left\", clientSideEditValidationCheck } = column;\n\n const { warningMessage, ...editProps } = useEditableText({\n value: dataValue,\n onEdit,\n clientSideEditValidationCheck,\n });\n\n const endAdornment =\n warningMessage && align === \"left\" ? (\n <span className={`${classBase}-icon`} data-icon=\"error\" />\n ) : undefined;\n\n const startAdornment =\n warningMessage && align === \"right\" ? (\n <span className={`${classBase}-icon`} data-icon=\"error\" />\n ) : undefined;\n\n return (\n <Input\n {...editProps}\n bordered\n className={cx(classBase, {\n [`${classBase}-error`]: warningMessage !== undefined,\n })}\n endAdornment={endAdornment}\n startAdornment={startAdornment}\n />\n );\n};\n\nregisterComponent(\"input-cell\", InputCell, \"cell-renderer\", {\n userCanAssign: false,\n});\n"],"names":[],"mappings":";;;;;;;;;AAUA,MAAM,SAAY,GAAA,mBAAA;AAEX,MAAM,YAAY,CAAC;AAAA,EACxB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAA8B,KAAA;AAC5B,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAA,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA;AACrC,EAAM,MAAA,SAAA,GAAY,IAAI,OAAO,CAAA;AAC7B,EAAA,MAAM,EAAE,KAAA,GAAQ,MAAQ,EAAA,6BAAA,EAAkC,GAAA,MAAA;AAE1D,EAAA,MAAM,EAAE,cAAA,EAAgB,GAAG,SAAA,KAAc,eAAgB,CAAA;AAAA,IACvD,KAAO,EAAA,SAAA;AAAA,IACP,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,YACJ,GAAA,cAAA,IAAkB,KAAU,KAAA,MAAA,mBACzB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA,EAAS,WAAU,EAAA,OAAA,EAAQ,CACtD,GAAA,KAAA,CAAA;AAEN,EAAA,MAAM,cACJ,GAAA,cAAA,IAAkB,KAAU,KAAA,OAAA,mBACzB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA,EAAS,WAAU,EAAA,OAAA,EAAQ,CACtD,GAAA,KAAA,CAAA;AAEN,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,QAAQ,EAAA,IAAA;AAAA,MACR,SAAA,EAAW,GAAG,SAAW,EAAA;AAAA,QACvB,CAAC,CAAA,EAAG,SAAS,CAAA,MAAA,CAAQ,GAAG,cAAmB,KAAA,KAAA;AAAA,OAC5C,CAAA;AAAA,MACD,YAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAEA,iBAAkB,CAAA,YAAA,EAAc,WAAW,eAAiB,EAAA;AAAA,EAC1D,aAAe,EAAA;AACjB,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"InputCell.js","sources":["../../../../../packages/vuu-table/src/cell-renderers/input-cell/InputCell.tsx"],"sourcesContent":["import { Input } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { useEditableText } from \"@vuu-ui/vuu-ui-controls\";\nimport { registerComponent } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\n\nimport inputCellCss from \"./InputCell.css\";\n\nconst classBase = \"vuuTableInputCell\";\n\nexport const InputCell = ({\n column,\n dataRow,\n onEdit,\n}: TableCellRendererProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-input-cell\",\n css: inputCellCss,\n window: targetWindow,\n });\n\n const dataValue = dataRow[column.name] as number | string;\n const { align = \"left\", clientSideEditValidationCheck } = column;\n\n const { warningMessage, ...editProps } = useEditableText({\n value: dataValue,\n onEdit,\n clientSideEditValidationCheck,\n });\n\n const endAdornment =\n warningMessage && align === \"left\" ? (\n <span className={`${classBase}-icon`} data-icon=\"error\" />\n ) : undefined;\n\n const startAdornment =\n warningMessage && align === \"right\" ? (\n <span className={`${classBase}-icon`} data-icon=\"error\" />\n ) : undefined;\n\n return (\n <Input\n {...editProps}\n bordered\n className={cx(classBase, {\n [`${classBase}-error`]: warningMessage !== undefined,\n })}\n endAdornment={endAdornment}\n startAdornment={startAdornment}\n />\n );\n};\n\nregisterComponent(\"input-cell\", InputCell, \"cell-renderer\", {\n userCanAssign: false,\n});\n"],"names":[],"mappings":";;;;;;;;;AAUA,MAAM,SAAY,GAAA,mBAAA;AAEX,MAAM,YAAY,CAAC;AAAA,EACxB,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAA8B,KAAA;AAC5B,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAA,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,SAAA,GAAY,OAAQ,CAAA,MAAA,CAAO,IAAI,CAAA;AACrC,EAAA,MAAM,EAAE,KAAA,GAAQ,MAAQ,EAAA,6BAAA,EAAkC,GAAA,MAAA;AAE1D,EAAA,MAAM,EAAE,cAAA,EAAgB,GAAG,SAAA,KAAc,eAAgB,CAAA;AAAA,IACvD,KAAO,EAAA,SAAA;AAAA,IACP,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,YACJ,GAAA,cAAA,IAAkB,KAAU,KAAA,MAAA,mBACzB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA,EAAS,WAAU,EAAA,OAAA,EAAQ,CACtD,GAAA,KAAA,CAAA;AAEN,EAAA,MAAM,cACJ,GAAA,cAAA,IAAkB,KAAU,KAAA,OAAA,mBACzB,GAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA,EAAS,WAAU,EAAA,OAAA,EAAQ,CACtD,GAAA,KAAA,CAAA;AAEN,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,QAAQ,EAAA,IAAA;AAAA,MACR,SAAA,EAAW,GAAG,SAAW,EAAA;AAAA,QACvB,CAAC,CAAA,EAAG,SAAS,CAAA,MAAA,CAAQ,GAAG,cAAmB,KAAA,KAAA;AAAA,OAC5C,CAAA;AAAA,MACD,YAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAEA,iBAAkB,CAAA,YAAA,EAAc,WAAW,eAAiB,EAAA;AAAA,EAC1D,aAAe,EAAA;AACjB,CAAC,CAAA;;;;"}
@@ -19,9 +19,8 @@ const getValueList = ({ name, type }) => {
19
19
  };
20
20
  const ToggleCell = memo(function ToggleCell2({
21
21
  column,
22
- columnMap,
23
- onEdit,
24
- row
22
+ dataRow,
23
+ onEdit
25
24
  }) {
26
25
  const targetWindow = useWindow();
27
26
  useComponentCssInjection({
@@ -30,8 +29,7 @@ const ToggleCell = memo(function ToggleCell2({
30
29
  window: targetWindow
31
30
  });
32
31
  const values = getValueList(column);
33
- const dataIdx = columnMap[column.name];
34
- const value = row[dataIdx];
32
+ const value = dataRow[column.name];
35
33
  const handleCommit = useCallback(
36
34
  async (evt, newValue) => {
37
35
  const res = await onEdit?.(
@@ -48,11 +46,12 @@ const ToggleCell = memo(function ToggleCell2({
48
46
  return /* @__PURE__ */ jsx(
49
47
  CycleStateButton,
50
48
  {
49
+ appearance: "solid",
51
50
  className: cx(classBase, `${classBase}-${column.name}`),
52
51
  onCommit: handleCommit,
52
+ sentiment: "accented",
53
53
  value,
54
54
  values,
55
- variant: "cta",
56
55
  children: value
57
56
  }
58
57
  );
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleCell.js","sources":["../../../../../packages/vuu-table/src/cell-renderers/toggle-cell/ToggleCell.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n TableCellRendererProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n CommitHandler,\n dataColumnAndKeyUnchanged,\n dispatchCustomEvent,\n isRpcSuccess,\n isTypeDescriptor,\n isValueListRenderer,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport { memo, useCallback } from \"react\";\nimport { CycleStateButton } from \"@vuu-ui/vuu-ui-controls\";\n\nimport toggleCellCss from \"./ToggleCell.css\";\n\nconst classBase = \"vuuTableToggleCell\";\n\nconst getValueList = ({ name, type }: ColumnDescriptor) => {\n if (isTypeDescriptor(type) && isValueListRenderer(type.renderer)) {\n return type.renderer.values;\n } else {\n throw Error(\n `useLookupValues column ${name} has not been configured with a values list`,\n );\n }\n};\n\nexport const ToggleCell = memo(function ToggleCell({\n column,\n columnMap,\n onEdit,\n row,\n}: TableCellRendererProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-toggle-cell\",\n css: toggleCellCss,\n window: targetWindow,\n });\n\n const values = getValueList(column);\n const dataIdx = columnMap[column.name];\n const value = row[dataIdx] as string;\n\n const handleCommit = useCallback<CommitHandler<HTMLButtonElement>>(\n async (evt, newValue) => {\n const res = await onEdit?.(\n { previousValue: value, value: newValue },\n \"commit\",\n );\n if (isRpcSuccess(res)) {\n dispatchCustomEvent(evt.target as HTMLElement, \"vuu-commit\");\n }\n return res;\n },\n [onEdit, value],\n );\n\n return (\n <CycleStateButton\n className={cx(classBase, `${classBase}-${column.name}`)}\n onCommit={handleCommit}\n value={value}\n values={values}\n variant=\"cta\"\n >\n {value}\n </CycleStateButton>\n );\n}, dataColumnAndKeyUnchanged);\n\nregisterComponent(\"toggle-cell\", ToggleCell, \"cell-renderer\", {\n userCanAssign: false,\n});\n"],"names":["ToggleCell"],"mappings":";;;;;;;;;AAsBA,MAAM,SAAY,GAAA,oBAAA;AAElB,MAAM,YAAe,GAAA,CAAC,EAAE,IAAA,EAAM,MAA6B,KAAA;AACzD,EAAA,IAAI,iBAAiB,IAAI,CAAA,IAAK,mBAAoB,CAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AAChE,IAAA,OAAO,KAAK,QAAS,CAAA,MAAA;AAAA,GAChB,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ,0BAA0B,IAAI,CAAA,2CAAA;AAAA,KAChC;AAAA;AAEJ,CAAA;AAEa,MAAA,UAAA,GAAa,IAAK,CAAA,SAASA,WAAW,CAAA;AAAA,EACjD,MAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAA2B,EAAA;AACzB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAA,aAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,MAAA,GAAS,aAAa,MAAM,CAAA;AAClC,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA;AACrC,EAAM,MAAA,KAAA,GAAQ,IAAI,OAAO,CAAA;AAEzB,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,OAAO,KAAK,QAAa,KAAA;AACvB,MAAA,MAAM,MAAM,MAAM,MAAA;AAAA,QAChB,EAAE,aAAA,EAAe,KAAO,EAAA,KAAA,EAAO,QAAS,EAAA;AAAA,QACxC;AAAA,OACF;AACA,MAAI,IAAA,YAAA,CAAa,GAAG,CAAG,EAAA;AACrB,QAAoB,mBAAA,CAAA,GAAA,CAAI,QAAuB,YAAY,CAAA;AAAA;AAE7D,MAAO,OAAA,GAAA;AAAA,KACT;AAAA,IACA,CAAC,QAAQ,KAAK;AAAA,GAChB;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,GAAG,SAAW,EAAA,CAAA,EAAG,SAAS,CAAI,CAAA,EAAA,MAAA,CAAO,IAAI,CAAE,CAAA,CAAA;AAAA,MACtD,QAAU,EAAA,YAAA;AAAA,MACV,KAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAQ,EAAA,KAAA;AAAA,MAEP,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ,CAAA,EAAG,yBAAyB;AAE5B,iBAAkB,CAAA,aAAA,EAAe,YAAY,eAAiB,EAAA;AAAA,EAC5D,aAAe,EAAA;AACjB,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"ToggleCell.js","sources":["../../../../../packages/vuu-table/src/cell-renderers/toggle-cell/ToggleCell.tsx"],"sourcesContent":["import {\n ColumnDescriptor,\n TableCellRendererProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n CommitHandler,\n dataColumnAndKeyUnchanged,\n dispatchCustomEvent,\n isRpcSuccess,\n isTypeDescriptor,\n isValueListRenderer,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport { memo, useCallback } from \"react\";\nimport { CycleStateButton } from \"@vuu-ui/vuu-ui-controls\";\n\nimport toggleCellCss from \"./ToggleCell.css\";\n\nconst classBase = \"vuuTableToggleCell\";\n\nconst getValueList = ({ name, type }: ColumnDescriptor) => {\n if (isTypeDescriptor(type) && isValueListRenderer(type.renderer)) {\n return type.renderer.values;\n } else {\n throw Error(\n `useLookupValues column ${name} has not been configured with a values list`,\n );\n }\n};\n\nexport const ToggleCell = memo(function ToggleCell({\n column,\n dataRow,\n onEdit,\n}: TableCellRendererProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-toggle-cell\",\n css: toggleCellCss,\n window: targetWindow,\n });\n\n const values = getValueList(column);\n const value = dataRow[column.name] as string;\n\n const handleCommit = useCallback<CommitHandler<HTMLButtonElement>>(\n async (evt, newValue) => {\n const res = await onEdit?.(\n { previousValue: value, value: newValue },\n \"commit\",\n );\n if (isRpcSuccess(res)) {\n dispatchCustomEvent(evt.target as HTMLElement, \"vuu-commit\");\n }\n return res;\n },\n [onEdit, value],\n );\n\n return (\n <CycleStateButton\n appearance=\"solid\"\n className={cx(classBase, `${classBase}-${column.name}`)}\n onCommit={handleCommit}\n sentiment=\"accented\"\n value={value}\n values={values}\n >\n {value}\n </CycleStateButton>\n );\n}, dataColumnAndKeyUnchanged);\n\nregisterComponent(\"toggle-cell\", ToggleCell, \"cell-renderer\", {\n userCanAssign: false,\n});\n"],"names":["ToggleCell"],"mappings":";;;;;;;;;AAsBA,MAAM,SAAY,GAAA,oBAAA;AAElB,MAAM,YAAe,GAAA,CAAC,EAAE,IAAA,EAAM,MAA6B,KAAA;AACzD,EAAA,IAAI,iBAAiB,IAAI,CAAA,IAAK,mBAAoB,CAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AAChE,IAAA,OAAO,KAAK,QAAS,CAAA,MAAA;AAAA,GAChB,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ,0BAA0B,IAAI,CAAA,2CAAA;AAAA,KAChC;AAAA;AAEJ,CAAA;AAEa,MAAA,UAAA,GAAa,IAAK,CAAA,SAASA,WAAW,CAAA;AAAA,EACjD,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAA2B,EAAA;AACzB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAA,aAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,MAAA,GAAS,aAAa,MAAM,CAAA;AAClC,EAAM,MAAA,KAAA,GAAQ,OAAQ,CAAA,MAAA,CAAO,IAAI,CAAA;AAEjC,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACnB,OAAO,KAAK,QAAa,KAAA;AACvB,MAAA,MAAM,MAAM,MAAM,MAAA;AAAA,QAChB,EAAE,aAAA,EAAe,KAAO,EAAA,KAAA,EAAO,QAAS,EAAA;AAAA,QACxC;AAAA,OACF;AACA,MAAI,IAAA,YAAA,CAAa,GAAG,CAAG,EAAA;AACrB,QAAoB,mBAAA,CAAA,GAAA,CAAI,QAAuB,YAAY,CAAA;AAAA;AAE7D,MAAO,OAAA,GAAA;AAAA,KACT;AAAA,IACA,CAAC,QAAQ,KAAK;AAAA,GAChB;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,UAAW,EAAA,OAAA;AAAA,MACX,SAAA,EAAW,GAAG,SAAW,EAAA,CAAA,EAAG,SAAS,CAAI,CAAA,EAAA,MAAA,CAAO,IAAI,CAAE,CAAA,CAAA;AAAA,MACtD,QAAU,EAAA,YAAA;AAAA,MACV,SAAU,EAAA,UAAA;AAAA,MACV,KAAA;AAAA,MACA,MAAA;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ,CAAA,EAAG,yBAAyB;AAE5B,iBAAkB,CAAA,aAAA,EAAe,YAAY,eAAiB,EAAA;AAAA,EAC5D,aAAe,EAAA;AACjB,CAAC,CAAA;;;;"}
@@ -0,0 +1,144 @@
1
+ const dataRowIntrinsicAttributes = {
2
+ childCount: true,
3
+ depth: true,
4
+ index: true,
5
+ isExpanded: true,
6
+ isSelected: true,
7
+ isLeaf: true,
8
+ key: true,
9
+ renderIndex: true
10
+ };
11
+ const dataRowOperations = {
12
+ hasColumn: true
13
+ };
14
+ const isDataRowIntrinsicAttribute = (attrName) => dataRowIntrinsicAttributes[attrName] === true;
15
+ const isDataRowOperation = (attrName) => dataRowOperations[attrName] === true;
16
+ const stringNumericTypes = {
17
+ long: true,
18
+ scaleddecimal2: true,
19
+ scaleddecimal4: true,
20
+ scaleddecimal6: true,
21
+ scaleddecimal8: true
22
+ };
23
+ const isStringNumericType = (type) => stringNumericTypes[type] === true;
24
+ const MAX_DECIMALS = "0000000";
25
+ const injectDecimalPoint = (value, decimal) => {
26
+ if (value === "0") {
27
+ return "0";
28
+ } else if (value.length < decimal) {
29
+ return `0.${(MAX_DECIMALS + value).slice(-decimal)}`;
30
+ } else {
31
+ return `${value.slice(0, -decimal)}.${value.slice(-decimal)}`;
32
+ }
33
+ };
34
+ const formatStringNumeric = (value, type) => {
35
+ switch (type) {
36
+ case "long":
37
+ return value;
38
+ case "scaleddecimal2":
39
+ return injectDecimalPoint(value, 2);
40
+ case "scaleddecimal4":
41
+ return injectDecimalPoint(value, 4);
42
+ case "scaleddecimal6":
43
+ return injectDecimalPoint(value, 6);
44
+ case "scaleddecimal8":
45
+ return injectDecimalPoint(value, 8);
46
+ }
47
+ };
48
+ function DataRowImpl(data, columnMap) {
49
+ const target = {};
50
+ const jsonSerializer = () => {
51
+ return Object.entries(columnMap).reduce(
52
+ (json, [name, mapEntry]) => {
53
+ if (mapEntry) {
54
+ json[name] = data[mapEntry.index];
55
+ }
56
+ return json;
57
+ },
58
+ {}
59
+ );
60
+ };
61
+ const DataRowOperations2 = {
62
+ hasColumn: (name) => columnMap[name] !== void 0
63
+ };
64
+ return new Proxy(target, {
65
+ get(_obj, prop) {
66
+ if (typeof prop === "symbol") {
67
+ return void 0;
68
+ } else if (prop === "toJSON") {
69
+ return jsonSerializer;
70
+ } else if (prop === "toString") {
71
+ return "DataRow";
72
+ } else if (prop === "$$typeof") {
73
+ return void 0;
74
+ } else if (isDataRowOperation(prop)) {
75
+ return DataRowOperations2[prop];
76
+ }
77
+ const columnMapEntry = columnMap[prop];
78
+ if (columnMapEntry === void 0) {
79
+ if (prop !== "") {
80
+ console.warn(`[DataRow:Proxy] unknown column ${prop}`);
81
+ }
82
+ return void 0;
83
+ }
84
+ if (isDataRowIntrinsicAttribute(prop)) {
85
+ return data[columnMapEntry.index];
86
+ }
87
+ if (isStringNumericType(columnMapEntry.type)) {
88
+ return formatStringNumeric(
89
+ data[columnMapEntry.index],
90
+ columnMapEntry.type
91
+ );
92
+ }
93
+ return data[columnMapEntry.index];
94
+ },
95
+ set() {
96
+ throw new TypeError("DataRow is readonly");
97
+ }
98
+ });
99
+ }
100
+ const ColumnMapIntrinsicColumns = {
101
+ index: { index: 0, type: "int" },
102
+ renderIndex: { index: 1, type: "int" },
103
+ isLeaf: { index: 2, type: "boolean" },
104
+ isExpanded: { index: 3, type: "boolean" },
105
+ depth: { index: 4, type: "int" },
106
+ childCount: { index: 5, type: "int" },
107
+ key: { index: 6, type: "string" },
108
+ isSelected: { index: 7, type: "boolean" }
109
+ };
110
+ function createColumnMap(columns, schemaColumns) {
111
+ const columnMap = {
112
+ ...ColumnMapIntrinsicColumns
113
+ };
114
+ columns.forEach((name, i) => {
115
+ const schemaColumn = schemaColumns.find((col) => col.name === name);
116
+ if (schemaColumn) {
117
+ columnMap[name] = { index: i + 10, type: schemaColumn.serverDataType };
118
+ } else {
119
+ throw Error(`[DataRow] dataRowFactory column not in schema ${name}`);
120
+ }
121
+ });
122
+ return columnMap;
123
+ }
124
+ const dataRowFactory = (columns, schemaColumns) => {
125
+ let columnMap = createColumnMap(columns, schemaColumns);
126
+ columns.forEach((name, i) => {
127
+ const schemaColumn = schemaColumns.find((col) => col.name === name);
128
+ if (schemaColumn) {
129
+ columnMap[name] = { index: i + 10, type: schemaColumn.serverDataType };
130
+ } else {
131
+ throw Error(`[DataRow] dataRowFactory column not in schema ${name}`);
132
+ }
133
+ });
134
+ const setColumns = (columns2) => {
135
+ columnMap = createColumnMap(columns2, schemaColumns);
136
+ };
137
+ const DataRow2 = function(data) {
138
+ return DataRowImpl(data, columnMap);
139
+ };
140
+ return [DataRow2, setColumns];
141
+ };
142
+
143
+ export { dataRowFactory };
144
+ //# sourceMappingURL=DataRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataRow.js","sources":["../../../../packages/vuu-table/src/data-row/DataRow.ts"],"sourcesContent":["import { DataSourceRow, SchemaColumn } from \"@vuu-ui/vuu-data-types\";\nimport {\n StringNumericType,\n VuuColumnDataType,\n VuuDataRow,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n DataRow,\n DataRowIntrinsicAttribute,\n DataRowOperation,\n DataRowOperations,\n} from \"@vuu-ui/vuu-table-types\";\n\ntype ColumnMapEntry = {\n index: number;\n type: VuuColumnDataType;\n};\n\n/**\n * We allow undefined to allow us to null out rather than delete entries, for\n * performance reasons.\n */\ntype DataRowColumnMap = Record<string, ColumnMapEntry | undefined>;\n\nconst dataRowIntrinsicAttributes: Record<DataRowIntrinsicAttribute, true> = {\n childCount: true,\n depth: true,\n index: true,\n isExpanded: true,\n isSelected: true,\n isLeaf: true,\n key: true,\n renderIndex: true,\n};\n\nconst dataRowOperations: Record<DataRowOperation, true> = {\n hasColumn: true,\n};\n\nconst isDataRowIntrinsicAttribute = (\n attrName: string,\n): attrName is DataRowIntrinsicAttribute =>\n dataRowIntrinsicAttributes[attrName as DataRowIntrinsicAttribute] === true;\n\nconst isDataRowOperation = (attrName: string): attrName is DataRowOperation =>\n dataRowOperations[attrName as DataRowOperation] === true;\n\nconst stringNumericTypes: Record<StringNumericType, true> = {\n long: true,\n scaleddecimal2: true,\n scaleddecimal4: true,\n scaleddecimal6: true,\n scaleddecimal8: true,\n};\n\nconst isStringNumericType = (\n type: VuuColumnDataType,\n): type is StringNumericType =>\n stringNumericTypes[type as StringNumericType] === true;\n\nconst MAX_DECIMALS = \"0000000\";\n\nconst injectDecimalPoint = (value: string, decimal: 2 | 4 | 6 | 8) => {\n if (value === \"0\") {\n return \"0\";\n } else if (value.length < decimal) {\n return `0.${(MAX_DECIMALS + value).slice(-decimal)}`;\n } else {\n return `${value.slice(0, -decimal)}.${value.slice(-decimal)}`;\n }\n};\n\nconst formatStringNumeric = (value: string, type: StringNumericType) => {\n switch (type) {\n case \"long\":\n return value;\n case \"scaleddecimal2\":\n return injectDecimalPoint(value, 2);\n case \"scaleddecimal4\":\n return injectDecimalPoint(value, 4);\n case \"scaleddecimal6\":\n return injectDecimalPoint(value, 6);\n case \"scaleddecimal8\":\n return injectDecimalPoint(value, 8);\n }\n};\n\nfunction DataRowImpl(data: VuuDataRow, columnMap: DataRowColumnMap): DataRow {\n const target: Record<string, VuuRowDataItemType> = {};\n\n const jsonSerializer = () => {\n return Object.entries(columnMap).reduce<Record<string, VuuRowDataItemType>>(\n (json, [name, mapEntry]) => {\n if (mapEntry) {\n json[name] = data[mapEntry.index];\n }\n return json;\n },\n {},\n );\n };\n\n const DataRowOperations: DataRowOperations = {\n hasColumn: (name: string) => columnMap[name] !== undefined,\n };\n\n return new Proxy(target, {\n get(_obj, prop: string | symbol) {\n if (typeof prop === \"symbol\") {\n // TODO what does React use this for\n return undefined;\n } else if (prop === \"toJSON\") {\n return jsonSerializer;\n } else if (prop === \"toString\") {\n return \"DataRow\";\n } else if (prop === \"$$typeof\") {\n // some react internal weirdness\n return undefined;\n } else if (isDataRowOperation(prop)) {\n return DataRowOperations[prop];\n }\n const columnMapEntry = columnMap[prop];\n\n if (columnMapEntry === undefined) {\n if (prop !== \"\") {\n // System columns like the selection checkbox column\n console.warn(`[DataRow:Proxy] unknown column ${prop}`);\n }\n return undefined;\n }\n\n if (isDataRowIntrinsicAttribute(prop)) {\n return data[columnMapEntry.index];\n }\n\n if (isStringNumericType(columnMapEntry.type)) {\n return formatStringNumeric(\n data[columnMapEntry.index] as string,\n columnMapEntry.type,\n );\n }\n\n return data[columnMapEntry.index];\n\n // throw new Error(`Unknown column: ${prop}`);\n },\n set() {\n throw new TypeError(\"DataRow is readonly\");\n },\n }) as DataRow;\n}\n\nexport type DataRowFunc = (data: DataSourceRow) => DataRow;\n\nconst ColumnMapIntrinsicColumns: DataRowColumnMap = {\n index: { index: 0, type: \"int\" },\n renderIndex: { index: 1, type: \"int\" },\n isLeaf: { index: 2, type: \"boolean\" },\n isExpanded: { index: 3, type: \"boolean\" },\n depth: { index: 4, type: \"int\" },\n childCount: { index: 5, type: \"int\" },\n key: { index: 6, type: \"string\" },\n isSelected: { index: 7, type: \"boolean\" },\n};\n\nfunction createColumnMap(\n columns: string[],\n schemaColumns: readonly SchemaColumn[],\n) {\n const columnMap: DataRowColumnMap = {\n ...ColumnMapIntrinsicColumns,\n };\n\n columns.forEach((name, i) => {\n const schemaColumn = schemaColumns.find((col) => col.name === name);\n if (schemaColumn) {\n columnMap[name] = { index: i + 10, type: schemaColumn.serverDataType };\n } else {\n throw Error(`[DataRow] dataRowFactory column not in schema ${name}`);\n }\n });\n return columnMap;\n}\n\n/**\n *\n * @param columns the names of columns included in subscription\n * @param schemaColumns full schema definitions for all available columns,\n * the serverDataTypes are used.\n * @returns a tuple containing:\n * - factory function that will create a DataRow instance from a DataSourceRow\n * array.\n * - a function that can be used to reset the columns, which will be used for all\n * subsequently created DataRows. Used by Table when user adds or removes columns\n * at runtime.\n */\nexport const dataRowFactory = (\n columns: string[],\n schemaColumns: readonly SchemaColumn[],\n): [DataRowFunc, (columns: string[]) => void] => {\n let columnMap = createColumnMap(columns, schemaColumns);\n\n columns.forEach((name, i) => {\n const schemaColumn = schemaColumns.find((col) => col.name === name);\n if (schemaColumn) {\n columnMap[name] = { index: i + 10, type: schemaColumn.serverDataType };\n } else {\n throw Error(`[DataRow] dataRowFactory column not in schema ${name}`);\n }\n });\n\n const setColumns = (columns: string[]) => {\n // new columnMap will be used for all subsequently created DataRows\n columnMap = createColumnMap(columns, schemaColumns);\n };\n\n const DataRow = function (data: DataSourceRow) {\n return DataRowImpl(data, columnMap);\n };\n\n return [DataRow, setColumns];\n};\n"],"names":["DataRowOperations","columns","DataRow"],"mappings":"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"}
package/esm/index.js CHANGED
@@ -24,4 +24,5 @@ export { isTableLocation, useTableContextMenu } from './useTableContextMenu.js';
24
24
  export { noScrolling, useTableScroll } from './useTableScroll.js';
25
25
  export { useTableViewport } from './useTableViewport.js';
26
26
  export { VirtualColSpan } from './VirtualColSpan.js';
27
+ export { dataRowFactory } from './data-row/DataRow.js';
27
28
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -10,10 +10,9 @@ import tableCellCss from './TableCell.css.js';
10
10
  const classBase = "vuuTableCell";
11
11
  const TableCell = ({
12
12
  column,
13
- columnMap,
13
+ dataRow,
14
14
  onClick,
15
15
  onDataEdited,
16
- row,
17
16
  searchPattern = ""
18
17
  }) => {
19
18
  const targetWindow = useWindow();
@@ -25,7 +24,6 @@ const TableCell = ({
25
24
  const [hasError, setHasError] = useState(false);
26
25
  const { className, style } = useCell(column, classBase, false, hasError);
27
26
  const { ariaColIndex, CellRenderer, valueFormatter } = column;
28
- const dataIdx = columnMap[column.name];
29
27
  const handleDataItemEdited = useCallback(
30
28
  (editState, editPhase) => {
31
29
  if (editPhase === "commit") {
@@ -38,7 +36,7 @@ const TableCell = ({
38
36
  return onDataEdited?.(
39
37
  {
40
38
  ...editState,
41
- row,
39
+ dataRow,
42
40
  columnName: column.name,
43
41
  value: typedValue
44
42
  },
@@ -49,7 +47,7 @@ const TableCell = ({
49
47
  onDataEdited?.(
50
48
  {
51
49
  ...editState,
52
- row,
50
+ dataRow,
53
51
  columnName: column.name
54
52
  },
55
53
  editPhase
@@ -57,7 +55,7 @@ const TableCell = ({
57
55
  return void 0;
58
56
  }
59
57
  },
60
- [column, onDataEdited, row]
58
+ [column, dataRow, onDataEdited]
61
59
  );
62
60
  const handleClick = useCallback(
63
61
  (evt) => {
@@ -65,7 +63,7 @@ const TableCell = ({
65
63
  },
66
64
  [column, onClick]
67
65
  );
68
- const value = valueFormatter(row[dataIdx]);
66
+ const value = valueFormatter(dataRow[column.name]);
69
67
  const valueWithHighlighting = useHighlighting(value, searchPattern);
70
68
  return /* @__PURE__ */ jsx(
71
69
  "div",
@@ -79,9 +77,8 @@ const TableCell = ({
79
77
  CellRenderer,
80
78
  {
81
79
  column,
82
- columnMap,
80
+ dataRow,
83
81
  onEdit: handleDataItemEdited,
84
- row,
85
82
  searchPattern
86
83
  }
87
84
  ) : valueWithHighlighting
@@ -1 +1 @@
1
- {"version":3,"file":"TableCell.js","sources":["../../../../packages/vuu-table/src/table-cell/TableCell.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport type {\n TableCellEditHandler,\n TableCellProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport { getTypedValue } from \"@vuu-ui/vuu-utils\";\nimport { MouseEventHandler, useCallback, useState } from \"react\";\nimport { useCell } from \"../useCell\";\nimport { useHighlighting } from \"../useHighlighting\";\n\nimport tableCellCss from \"./TableCell.css\";\n\nconst classBase = \"vuuTableCell\";\n\nexport const TableCell = ({\n column,\n columnMap,\n onClick,\n onDataEdited,\n row,\n searchPattern = \"\",\n}: TableCellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-cell\",\n css: tableCellCss,\n window: targetWindow,\n });\n\n const [hasError, setHasError] = useState(false);\n\n const { className, style } = useCell(column, classBase, false, hasError);\n const { ariaColIndex, CellRenderer, valueFormatter } = column;\n const dataIdx = columnMap[column.name];\n\n const handleDataItemEdited = useCallback<TableCellEditHandler>(\n (editState, editPhase) => {\n if (editPhase === \"commit\") {\n const { serverDataType = \"string\" } = column;\n const typedValue = getTypedValue(\n String(editState.value),\n serverDataType,\n true,\n );\n return onDataEdited?.(\n {\n ...editState,\n row,\n columnName: column.name,\n value: typedValue,\n },\n editPhase,\n );\n } else {\n setHasError(editState.isValid === false);\n onDataEdited?.(\n {\n ...editState,\n row,\n columnName: column.name,\n },\n editPhase,\n );\n return undefined;\n }\n },\n [column, onDataEdited, row],\n );\n\n const handleClick = useCallback<MouseEventHandler>(\n (evt) => {\n onClick?.(evt, column);\n },\n [column, onClick],\n );\n\n const value = valueFormatter(row[dataIdx]);\n const valueWithHighlighting = useHighlighting(value, searchPattern);\n\n return (\n <div\n aria-colindex={ariaColIndex}\n className={className}\n onClick={onClick ? handleClick : undefined}\n role=\"cell\"\n style={style}\n >\n {CellRenderer ? (\n <CellRenderer\n column={column}\n columnMap={columnMap}\n onEdit={handleDataItemEdited}\n row={row}\n searchPattern={searchPattern}\n />\n ) : (\n valueWithHighlighting\n )}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAaA,MAAM,SAAY,GAAA,cAAA;AAEX,MAAM,YAAY,CAAC;AAAA,EACxB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAA;AAAA,EACA,aAAgB,GAAA;AAClB,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAA,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAE9C,EAAM,MAAA,EAAE,WAAW,KAAM,EAAA,GAAI,QAAQ,MAAQ,EAAA,SAAA,EAAW,OAAO,QAAQ,CAAA;AACvE,EAAA,MAAM,EAAE,YAAA,EAAc,YAAc,EAAA,cAAA,EAAmB,GAAA,MAAA;AACvD,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA;AAErC,EAAA,MAAM,oBAAuB,GAAA,WAAA;AAAA,IAC3B,CAAC,WAAW,SAAc,KAAA;AACxB,MAAA,IAAI,cAAc,QAAU,EAAA;AAC1B,QAAM,MAAA,EAAE,cAAiB,GAAA,QAAA,EAAa,GAAA,MAAA;AACtC,QAAA,MAAM,UAAa,GAAA,aAAA;AAAA,UACjB,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,UACtB,cAAA;AAAA,UACA;AAAA,SACF;AACA,QAAO,OAAA,YAAA;AAAA,UACL;AAAA,YACE,GAAG,SAAA;AAAA,YACH,GAAA;AAAA,YACA,YAAY,MAAO,CAAA,IAAA;AAAA,YACnB,KAAO,EAAA;AAAA,WACT;AAAA,UACA;AAAA,SACF;AAAA,OACK,MAAA;AACL,QAAY,WAAA,CAAA,SAAA,CAAU,YAAY,KAAK,CAAA;AACvC,QAAA,YAAA;AAAA,UACE;AAAA,YACE,GAAG,SAAA;AAAA,YACH,GAAA;AAAA,YACA,YAAY,MAAO,CAAA;AAAA,WACrB;AAAA,UACA;AAAA,SACF;AACA,QAAO,OAAA,KAAA,CAAA;AAAA;AACT,KACF;AAAA,IACA,CAAC,MAAQ,EAAA,YAAA,EAAc,GAAG;AAAA,GAC5B;AAEA,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAQ,KAAA;AACP,MAAA,OAAA,GAAU,KAAK,MAAM,CAAA;AAAA,KACvB;AAAA,IACA,CAAC,QAAQ,OAAO;AAAA,GAClB;AAEA,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAe,GAAI,CAAA,OAAO,CAAC,CAAA;AACzC,EAAM,MAAA,qBAAA,GAAwB,eAAgB,CAAA,KAAA,EAAO,aAAa,CAAA;AAElE,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,eAAe,EAAA,YAAA;AAAA,MACf,SAAA;AAAA,MACA,OAAA,EAAS,UAAU,WAAc,GAAA,KAAA,CAAA;AAAA,MACjC,IAAK,EAAA,MAAA;AAAA,MACL,KAAA;AAAA,MAEC,QACC,EAAA,YAAA,mBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,SAAA;AAAA,UACA,MAAQ,EAAA,oBAAA;AAAA,UACR,GAAA;AAAA,UACA;AAAA;AAAA,OAGF,GAAA;AAAA;AAAA,GAEJ;AAEJ;;;;"}
1
+ {"version":3,"file":"TableCell.js","sources":["../../../../packages/vuu-table/src/table-cell/TableCell.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport type {\n TableCellEditHandler,\n TableCellProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport { getTypedValue } from \"@vuu-ui/vuu-utils\";\nimport { MouseEventHandler, useCallback, useState } from \"react\";\nimport { useCell } from \"../useCell\";\nimport { useHighlighting } from \"../useHighlighting\";\n\nimport tableCellCss from \"./TableCell.css\";\n\nconst classBase = \"vuuTableCell\";\n\nexport const TableCell = ({\n column,\n dataRow,\n onClick,\n onDataEdited,\n searchPattern = \"\",\n}: TableCellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-cell\",\n css: tableCellCss,\n window: targetWindow,\n });\n\n const [hasError, setHasError] = useState(false);\n\n const { className, style } = useCell(column, classBase, false, hasError);\n const { ariaColIndex, CellRenderer, valueFormatter } = column;\n // const dataIdx = columnMap[column.name];\n\n const handleDataItemEdited = useCallback<TableCellEditHandler>(\n (editState, editPhase) => {\n if (editPhase === \"commit\") {\n const { serverDataType = \"string\" } = column;\n const typedValue = getTypedValue(\n String(editState.value),\n serverDataType,\n true,\n );\n return onDataEdited?.(\n {\n ...editState,\n dataRow,\n columnName: column.name,\n value: typedValue,\n },\n editPhase,\n );\n } else {\n setHasError(editState.isValid === false);\n onDataEdited?.(\n {\n ...editState,\n dataRow,\n columnName: column.name,\n },\n editPhase,\n );\n return undefined;\n }\n },\n [column, dataRow, onDataEdited],\n );\n\n const handleClick = useCallback<MouseEventHandler>(\n (evt) => {\n onClick?.(evt, column);\n },\n [column, onClick],\n );\n\n const value = valueFormatter(dataRow[column.name]);\n const valueWithHighlighting = useHighlighting(value, searchPattern);\n\n return (\n <div\n aria-colindex={ariaColIndex}\n className={className}\n onClick={onClick ? handleClick : undefined}\n role=\"cell\"\n style={style}\n >\n {CellRenderer ? (\n <CellRenderer\n column={column}\n dataRow={dataRow}\n onEdit={handleDataItemEdited}\n searchPattern={searchPattern}\n />\n ) : (\n valueWithHighlighting\n )}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAaA,MAAM,SAAY,GAAA,cAAA;AAEX,MAAM,YAAY,CAAC;AAAA,EACxB,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAgB,GAAA;AAClB,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAA,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAE9C,EAAM,MAAA,EAAE,WAAW,KAAM,EAAA,GAAI,QAAQ,MAAQ,EAAA,SAAA,EAAW,OAAO,QAAQ,CAAA;AACvE,EAAA,MAAM,EAAE,YAAA,EAAc,YAAc,EAAA,cAAA,EAAmB,GAAA,MAAA;AAGvD,EAAA,MAAM,oBAAuB,GAAA,WAAA;AAAA,IAC3B,CAAC,WAAW,SAAc,KAAA;AACxB,MAAA,IAAI,cAAc,QAAU,EAAA;AAC1B,QAAM,MAAA,EAAE,cAAiB,GAAA,QAAA,EAAa,GAAA,MAAA;AACtC,QAAA,MAAM,UAAa,GAAA,aAAA;AAAA,UACjB,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,UACtB,cAAA;AAAA,UACA;AAAA,SACF;AACA,QAAO,OAAA,YAAA;AAAA,UACL;AAAA,YACE,GAAG,SAAA;AAAA,YACH,OAAA;AAAA,YACA,YAAY,MAAO,CAAA,IAAA;AAAA,YACnB,KAAO,EAAA;AAAA,WACT;AAAA,UACA;AAAA,SACF;AAAA,OACK,MAAA;AACL,QAAY,WAAA,CAAA,SAAA,CAAU,YAAY,KAAK,CAAA;AACvC,QAAA,YAAA;AAAA,UACE;AAAA,YACE,GAAG,SAAA;AAAA,YACH,OAAA;AAAA,YACA,YAAY,MAAO,CAAA;AAAA,WACrB;AAAA,UACA;AAAA,SACF;AACA,QAAO,OAAA,KAAA,CAAA;AAAA;AACT,KACF;AAAA,IACA,CAAC,MAAQ,EAAA,OAAA,EAAS,YAAY;AAAA,GAChC;AAEA,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAQ,KAAA;AACP,MAAA,OAAA,GAAU,KAAK,MAAM,CAAA;AAAA,KACvB;AAAA,IACA,CAAC,QAAQ,OAAO;AAAA,GAClB;AAEA,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAe,OAAQ,CAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AACjD,EAAM,MAAA,qBAAA,GAAwB,eAAgB,CAAA,KAAA,EAAO,aAAa,CAAA;AAElE,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,eAAe,EAAA,YAAA;AAAA,MACf,SAAA;AAAA,MACA,OAAA,EAAS,UAAU,WAAc,GAAA,KAAA,CAAA;AAAA,MACjC,IAAK,EAAA,MAAA;AAAA,MACL,KAAA;AAAA,MAEC,QACC,EAAA,YAAA,mBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,OAAA;AAAA,UACA,MAAQ,EAAA,oBAAA;AAAA,UACR;AAAA;AAAA,OAGF,GAAA;AAAA;AAAA,GAEJ;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- var tableGroupCellCss = ".vuuTableGroupCell.vuuTableCell {\n --group-cell-spacer-width: 20px;\n align-items: center;\n border-right-color: var(\n --vuuTableGroupCell-borderColor,\n var(--salt-separable-tertiary-borderColor)\n );\n border-right-style: solid;\n border-right-width: 1px;\n\n cursor: pointer;\n display: inline-flex;\n line-height: 16px;\n\n .vuuIcon {\n --vuu-icon-height: 20px;\n --vuu-icon-width: 20px;\n margin-right: var(--salt-spacing-100);\n min-width: 20px;\n }\n\n .vuuTableGroupCell-toggle {\n --vuu-icon-height: 16px;\n --vuu-icon-size: 7px;\n --vuu-icon-width: 8px;\n margin-right: 4px;\n transition: transform 0.25s;\n transform: var(--toggle-icon-transform);\n }\n\n .vuuTableGroupCell-label {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n\n[aria-level=\"2\"] {\n --indent: 1;\n}\n[aria-level=\"3\"] {\n --indent: 2;\n}\n[aria-level=\"4\"] {\n --indent: 3;\n}\n[aria-level=\"5\"] {\n --indent: 4;\n}\n[aria-level=\"6\"] {\n --indent: 5;\n}\n[aria-level=\"7\"] {\n --indent: 6;\n}\n[aria-level=\"8\"] {\n --indent: 7;\n}\n[aria-level=\"9\"] {\n --indent: 8;\n}\n[aria-level=\"10\"] {\n --indent: 9;\n}\n\n.vuuTableGroupCell-spacer {\n display: inline-block;\n min-width: calc(var(--indent, 0) * var(--group-cell-spacer-width));\n}\n\n.vuuTreeTable {\n .vuuTableGroupCell.vuuTableCell {\n border-right: none;\n } \n}";
1
+ var tableGroupCellCss = ".vuuTableGroupCell.vuuTableCell {\n --group-cell-spacer-width: 20px;\n align-items: center;\n border-right-color: var(\n --vuuTableGroupCell-borderColor,\n var(--salt-separable-tertiary-borderColor)\n );\n border-right-style: solid;\n border-right-width: 1px;\n\n cursor: pointer;\n display: inline-flex;\n line-height: 16px;\n\n .vuuIcon {\n --vuu-icon-height: 20px;\n --vuu-icon-width: 20px;\n margin-right: var(--salt-spacing-100);\n min-width: 20px;\n }\n\n .vuuToggleIconButton.saltButton {\n --saltButton-height: 20px;\n --saltButton-width: 20px;\n }\n\n .vuuTableGroupCell-label {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n\n[aria-level=\"2\"] {\n --indent: 1;\n &:not([aria-expanded]){\n --indent: 2;\n }\n}\n[aria-level=\"3\"] {\n --indent: 2;\n &:not([aria-expanded]){\n --indent: 3;\n }\n}\n[aria-level=\"4\"] {\n --indent: 3;\n &:not([aria-expanded]){\n --indent: 4;\n }\n}\n[aria-level=\"5\"] {\n --indent: 4;\n}\n[aria-level=\"6\"] {\n --indent: 5;\n}\n[aria-level=\"7\"] {\n --indent: 6;\n}\n[aria-level=\"8\"] {\n --indent: 7;\n}\n[aria-level=\"9\"] {\n --indent: 8;\n}\n[aria-level=\"10\"] {\n --indent: 9;\n}\n\n.vuuTableGroupCell-spacer {\n display: inline-block;\n min-width: calc(var(--indent, 0) * var(--group-cell-spacer-width));\n}\n\n.vuuTreeTable {\n .vuuTableGroupCell.vuuTableCell {\n border-right: none;\n } \n}";
2
2
 
3
3
  export { tableGroupCellCss as default };
4
4
  //# sourceMappingURL=TableGroupCell.css.js.map
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { ToggleIconButton, Icon } from '@vuu-ui/vuu-ui-controls';
3
- import { getGroupValue, getGroupIcon, metadataKeys } from '@vuu-ui/vuu-utils';
3
+ import { getGroupValue, getGroupIcon } from '@vuu-ui/vuu-utils';
4
4
  import { useComponentCssInjection } from '@salt-ds/styles';
5
5
  import { useWindow } from '@salt-ds/window';
6
6
  import cx from 'clsx';
@@ -10,13 +10,11 @@ import tableCellCss from './TableCell.css.js';
10
10
  import tableGroupCellCss from './TableGroupCell.css.js';
11
11
  import { useHighlighting } from '../useHighlighting.js';
12
12
 
13
- const { COUNT, IS_EXPANDED, IS_LEAF } = metadataKeys;
14
13
  const classBase = "vuuTableGroupCell";
15
14
  const TableGroupCell = ({
16
15
  column,
17
- columnMap,
16
+ dataRow,
18
17
  onClick,
19
- row,
20
18
  searchPattern = ""
21
19
  }) => {
22
20
  const targetWindow = useWindow();
@@ -31,9 +29,9 @@ const TableGroupCell = ({
31
29
  window: targetWindow
32
30
  });
33
31
  const { columns } = column;
34
- const value = getGroupValue(columns, row, columnMap);
32
+ const value = getGroupValue(columns, dataRow);
35
33
  const valueWithHighlighting = useHighlighting(value || "", searchPattern);
36
- const icon = getGroupIcon(columns, row);
34
+ const icon = getGroupIcon(columns, dataRow);
37
35
  const { className, style } = useCell(column, classBase);
38
36
  const handleClick = useCallback(
39
37
  (evt) => {
@@ -41,7 +39,8 @@ const TableGroupCell = ({
41
39
  },
42
40
  [column, onClick]
43
41
  );
44
- const { [COUNT]: count, [IS_EXPANDED]: isExpanded, [IS_LEAF]: isLeaf } = row;
42
+ const { childCount, isExpanded, isLeaf } = dataRow;
43
+ const isLeafNode = isLeaf || childCount == 0;
45
44
  return /* @__PURE__ */ jsxs(
46
45
  "div",
47
46
  {
@@ -49,10 +48,10 @@ const TableGroupCell = ({
49
48
  className: cx(className, "vuuTableCell"),
50
49
  role: "cell",
51
50
  style,
52
- onClick: isLeaf ? void 0 : handleClick,
51
+ onClick: isLeafNode ? void 0 : handleClick,
53
52
  children: [
54
53
  /* @__PURE__ */ jsx("span", { className: `${classBase}-spacer` }),
55
- isLeaf || count == 0 ? null : /* @__PURE__ */ jsx(ToggleIconButton, { isExpanded }),
54
+ isLeafNode ? null : /* @__PURE__ */ jsx(ToggleIconButton, { isExpanded }),
56
55
  icon ? /* @__PURE__ */ jsx(Icon, { name: icon }) : null,
57
56
  /* @__PURE__ */ jsx("span", { className: `${classBase}-label`, children: valueWithHighlighting })
58
57
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"TableGroupCell.js","sources":["../../../../packages/vuu-table/src/table-cell/TableGroupCell.tsx"],"sourcesContent":["import { GroupColumnDescriptor, TableCellProps } from \"@vuu-ui/vuu-table-types\";\nimport { Icon, ToggleIconButton } from \"@vuu-ui/vuu-ui-controls\";\nimport { getGroupIcon, getGroupValue, metadataKeys } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { MouseEvent, useCallback } from \"react\";\nimport { useCell } from \"../useCell\";\n\nimport tableCellCss from \"./TableCell.css\";\nimport tableGroupCellCss from \"./TableGroupCell.css\";\nimport { useHighlighting } from \"../useHighlighting\";\n\nconst { COUNT, IS_EXPANDED, IS_LEAF } = metadataKeys;\n\nconst classBase = \"vuuTableGroupCell\";\n\nexport const TableGroupCell = ({\n column,\n columnMap,\n onClick,\n row,\n searchPattern = \"\",\n}: TableCellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-cell\",\n css: tableCellCss,\n window: targetWindow,\n });\n useComponentCssInjection({\n testId: \"vuu-table-group-cell\",\n css: tableGroupCellCss,\n window: targetWindow,\n });\n\n const { columns } = column as GroupColumnDescriptor;\n const value = getGroupValue(columns, row, columnMap);\n const valueWithHighlighting = useHighlighting(value || \"\", searchPattern);\n\n const icon = getGroupIcon(columns, row);\n const { className, style } = useCell(column, classBase);\n\n const handleClick = useCallback(\n (evt: MouseEvent<HTMLDivElement>) => {\n onClick?.(evt, column);\n },\n [column, onClick],\n );\n\n const { [COUNT]: count, [IS_EXPANDED]: isExpanded, [IS_LEAF]: isLeaf } = row;\n\n return (\n <div\n aria-colindex={1}\n className={cx(className, \"vuuTableCell\")}\n role=\"cell\"\n style={style}\n onClick={isLeaf ? undefined : handleClick}\n >\n <span className={`${classBase}-spacer`} />\n {isLeaf || count == 0 ? null : (\n <ToggleIconButton isExpanded={isExpanded} />\n )}\n {icon ? <Icon name={icon} /> : null}\n <span className={`${classBase}-label`}>{valueWithHighlighting}</span>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAaA,MAAM,EAAE,KAAA,EAAO,WAAa,EAAA,OAAA,EAAY,GAAA,YAAA;AAExC,MAAM,SAAY,GAAA,mBAAA;AAEX,MAAM,iBAAiB,CAAC;AAAA,EAC7B,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EACA,aAAgB,GAAA;AAClB,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAA,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AACD,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,sBAAA;AAAA,IACR,GAAK,EAAA,iBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,EAAE,SAAY,GAAA,MAAA;AACpB,EAAA,MAAM,KAAQ,GAAA,aAAA,CAAc,OAAS,EAAA,GAAA,EAAK,SAAS,CAAA;AACnD,EAAA,MAAM,qBAAwB,GAAA,eAAA,CAAgB,KAAS,IAAA,EAAA,EAAI,aAAa,CAAA;AAExE,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,OAAA,EAAS,GAAG,CAAA;AACtC,EAAA,MAAM,EAAE,SAAW,EAAA,KAAA,EAAU,GAAA,OAAA,CAAQ,QAAQ,SAAS,CAAA;AAEtD,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAoC,KAAA;AACnC,MAAA,OAAA,GAAU,KAAK,MAAM,CAAA;AAAA,KACvB;AAAA,IACA,CAAC,QAAQ,OAAO;AAAA,GAClB;AAEA,EAAA,MAAM,EAAE,CAAC,KAAK,GAAG,KAAO,EAAA,CAAC,WAAW,GAAG,UAAY,EAAA,CAAC,OAAO,GAAG,QAAW,GAAA,GAAA;AAEzE,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,eAAe,EAAA,CAAA;AAAA,MACf,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,cAAc,CAAA;AAAA,MACvC,IAAK,EAAA,MAAA;AAAA,MACL,KAAA;AAAA,MACA,OAAA,EAAS,SAAS,KAAY,CAAA,GAAA,WAAA;AAAA,MAE9B,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,CAAW,OAAA,CAAA,EAAA,CAAA;AAAA,QACvC,UAAU,KAAS,IAAA,CAAA,GAAI,IACtB,mBAAA,GAAA,CAAC,oBAAiB,UAAwB,EAAA,CAAA;AAAA,QAE3C,IAAO,mBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAM,MAAM,CAAK,GAAA,IAAA;AAAA,4BAC9B,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAW,QAAsB,EAAA,qBAAA,EAAA;AAAA;AAAA;AAAA,GAChE;AAEJ;;;;"}
1
+ {"version":3,"file":"TableGroupCell.js","sources":["../../../../packages/vuu-table/src/table-cell/TableGroupCell.tsx"],"sourcesContent":["import { GroupColumnDescriptor, TableCellProps } from \"@vuu-ui/vuu-table-types\";\nimport { Icon, ToggleIconButton } from \"@vuu-ui/vuu-ui-controls\";\nimport { getGroupIcon, getGroupValue } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport { MouseEvent, useCallback } from \"react\";\nimport { useCell } from \"../useCell\";\n\nimport tableCellCss from \"./TableCell.css\";\nimport tableGroupCellCss from \"./TableGroupCell.css\";\nimport { useHighlighting } from \"../useHighlighting\";\n\nconst classBase = \"vuuTableGroupCell\";\n\nexport const TableGroupCell = ({\n column,\n dataRow,\n onClick,\n searchPattern = \"\",\n}: TableCellProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-cell\",\n css: tableCellCss,\n window: targetWindow,\n });\n useComponentCssInjection({\n testId: \"vuu-table-group-cell\",\n css: tableGroupCellCss,\n window: targetWindow,\n });\n\n const { columns } = column as GroupColumnDescriptor;\n const value = getGroupValue(columns, dataRow);\n const valueWithHighlighting = useHighlighting(value || \"\", searchPattern);\n\n const icon = getGroupIcon(columns, dataRow);\n const { className, style } = useCell(column, classBase);\n\n const handleClick = useCallback(\n (evt: MouseEvent<HTMLDivElement>) => {\n onClick?.(evt, column);\n },\n [column, onClick],\n );\n\n const { childCount, isExpanded, isLeaf } = dataRow;\n\n // In a TreeTable, no nodes are tagged as leaf nodes, but those with childCount = 0\n // behave as leaf nodes\n const isLeafNode = isLeaf || childCount == 0;\n\n return (\n <div\n aria-colindex={1}\n className={cx(className, \"vuuTableCell\")}\n role=\"cell\"\n style={style}\n onClick={isLeafNode ? undefined : handleClick}\n >\n <span className={`${classBase}-spacer`} />\n {isLeafNode ? null : <ToggleIconButton isExpanded={isExpanded} />}\n {icon ? <Icon name={icon} /> : null}\n <span className={`${classBase}-label`}>{valueWithHighlighting}</span>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAaA,MAAM,SAAY,GAAA,mBAAA;AAEX,MAAM,iBAAiB,CAAC;AAAA,EAC7B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAgB,GAAA;AAClB,CAAsB,KAAA;AACpB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAA,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AACD,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,sBAAA;AAAA,IACR,GAAK,EAAA,iBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,EAAE,SAAY,GAAA,MAAA;AACpB,EAAM,MAAA,KAAA,GAAQ,aAAc,CAAA,OAAA,EAAS,OAAO,CAAA;AAC5C,EAAA,MAAM,qBAAwB,GAAA,eAAA,CAAgB,KAAS,IAAA,EAAA,EAAI,aAAa,CAAA;AAExE,EAAM,MAAA,IAAA,GAAO,YAAa,CAAA,OAAA,EAAS,OAAO,CAAA;AAC1C,EAAA,MAAM,EAAE,SAAW,EAAA,KAAA,EAAU,GAAA,OAAA,CAAQ,QAAQ,SAAS,CAAA;AAEtD,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAoC,KAAA;AACnC,MAAA,OAAA,GAAU,KAAK,MAAM,CAAA;AAAA,KACvB;AAAA,IACA,CAAC,QAAQ,OAAO;AAAA,GAClB;AAEA,EAAA,MAAM,EAAE,UAAA,EAAY,UAAY,EAAA,MAAA,EAAW,GAAA,OAAA;AAI3C,EAAM,MAAA,UAAA,GAAa,UAAU,UAAc,IAAA,CAAA;AAE3C,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,eAAe,EAAA,CAAA;AAAA,MACf,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,cAAc,CAAA;AAAA,MACvC,IAAK,EAAA,MAAA;AAAA,MACL,KAAA;AAAA,MACA,OAAA,EAAS,aAAa,KAAY,CAAA,GAAA,WAAA;AAAA,MAElC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,CAAW,OAAA,CAAA,EAAA,CAAA;AAAA,QACvC,UAAa,GAAA,IAAA,mBAAQ,GAAA,CAAA,gBAAA,EAAA,EAAiB,UAAwB,EAAA,CAAA;AAAA,QAC9D,IAAO,mBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAM,MAAM,CAAK,GAAA,IAAA;AAAA,4BAC9B,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAW,QAAsB,EAAA,qBAAA,EAAA;AAAA;AAAA;AAAA,GAChE;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import { WindowRange, metadataKeys } from '@vuu-ui/vuu-utils';
1
+ import { WindowRange } from '@vuu-ui/vuu-utils';
2
2
 
3
3
  var __defProp = Object.defineProperty;
4
4
  var __typeError = (msg) => {
@@ -11,8 +11,7 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
11
11
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
12
12
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
13
13
  var _range;
14
- const { SELECTED } = metadataKeys;
15
- class MovingWindow {
14
+ class MovingDataRowWindow {
16
15
  constructor({ from, to }) {
17
16
  __publicField(this, "data");
18
17
  __publicField(this, "rowCount", 0);
@@ -28,7 +27,7 @@ class MovingWindow {
28
27
  this.rowCount = 0;
29
28
  }
30
29
  add(data) {
31
- const [index] = data;
30
+ const { index } = data;
32
31
  if (this.isWithinRange(index)) {
33
32
  const internalIndex = index - __privateGet(this, _range).from;
34
33
  this.data[internalIndex] = data;
@@ -37,6 +36,9 @@ class MovingWindow {
37
36
  getAtIndex(index) {
38
37
  return __privateGet(this, _range).isWithin(index) && this.data[index - __privateGet(this, _range).from] != null ? this.data[index - __privateGet(this, _range).from] : void 0;
39
38
  }
39
+ getByKey(key) {
40
+ return this.data.find((row) => row.key === key);
41
+ }
40
42
  isWithinRange(index) {
41
43
  return __privateGet(this, _range).isWithin(index);
42
44
  }
@@ -57,37 +59,25 @@ class MovingWindow {
57
59
  }
58
60
  }
59
61
  getSelectedRows() {
60
- return this.data.filter((row) => row[SELECTED] !== 0);
62
+ return this.data.filter((dataRow) => dataRow.isSelected);
61
63
  }
62
- get range() {
63
- return __privateGet(this, _range);
64
+ get hasData() {
65
+ return this.data.some((d) => d !== void 0);
64
66
  }
65
- slice() {
66
- const data = [];
67
- const { from } = this.range;
67
+ /**
68
+ * This will throw if there is no data. Check `hasData` first
69
+ * to guard against this, if not certain.
70
+ */
71
+ get firstRow() {
68
72
  for (let i = 0; i < this.data.length; i++) {
69
73
  if (this.data[i]) {
70
- data.push(this.data[i]);
71
- } else {
72
- data.push([from + i, from + i, true, false, 1, 0, "", 0, 0, false]);
74
+ return this.data[i];
73
75
  }
74
76
  }
75
- return data;
77
+ throw Error(`[DataRowMovingWinddow] firstRow, no data`);
76
78
  }
77
- /**
78
- * Update all rows by splicing the supplied index. Used when a column
79
- * is removed.
80
- */
81
- spliceDataAtIndex(index) {
82
- if (index >= 10) {
83
- for (let i = 0; i < this.data.length; i++) {
84
- if (this.data[i]) {
85
- this.data[i] = this.data[i].toSpliced(index, 1);
86
- }
87
- }
88
- } else {
89
- throw Error(`[MovingWindow] canno splir metadata value from Row`);
90
- }
79
+ get range() {
80
+ return __privateGet(this, _range);
91
81
  }
92
82
  // TODO make this more performant, see implementation in
93
83
  // array-backed-moving-window - use same implementation
@@ -103,5 +93,5 @@ class MovingWindow {
103
93
  }
104
94
  _range = new WeakMap();
105
95
 
106
- export { MovingWindow };
107
- //# sourceMappingURL=moving-window.js.map
96
+ export { MovingDataRowWindow };
97
+ //# sourceMappingURL=DataRowMovingWindow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataRowMovingWindow.js","sources":["../../../../packages/vuu-table/src/table-data-source/DataRowMovingWindow.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { DataRow } from \"@vuu-ui/vuu-table-types\";\nimport { WindowRange } from \"@vuu-ui/vuu-utils\";\n\nexport class MovingDataRowWindow {\n public data: DataRow[];\n public rowCount = 0;\n #range: WindowRange;\n\n constructor({ from, to }: VuuRange) {\n this.#range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(Math.max(0, to - from));\n this.rowCount = 0;\n }\n\n setRowCount = (rowCount: number) => {\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n\n this.rowCount = rowCount;\n };\n\n add(data: DataRow) {\n const { index } = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.#range.from;\n this.data[internalIndex] = data;\n }\n }\n\n getAtIndex(index: number) {\n return this.#range.isWithin(index) &&\n this.data[index - this.#range.from] != null\n ? this.data[index - this.#range.from]\n : undefined;\n }\n\n getByKey(key: string) {\n return this.data.find((row) => row.key === key);\n }\n\n isWithinRange(index: number) {\n return this.#range.isWithin(index);\n }\n\n setRange({ from, to }: VuuRange) {\n if (from !== this.#range.from || to !== this.#range.to) {\n const [overlapFrom, overlapTo] = this.#range.overlap(from, to);\n const newData = new Array(Math.max(0, to - from));\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.#range.from = from;\n this.#range.to = to;\n }\n }\n\n getSelectedRows() {\n return this.data.filter((dataRow) => dataRow.isSelected);\n }\n\n get hasData() {\n return this.data.some((d) => d !== undefined);\n }\n\n /**\n * This will throw if there is no data. Check `hasData` first\n * to guard against this, if not certain.\n */\n get firstRow() {\n for (let i = 0; i < this.data.length; i++) {\n if (this.data[i]) {\n return this.data[i];\n }\n }\n throw Error(`[DataRowMovingWinddow] firstRow, no data`);\n }\n\n get range() {\n return this.#range;\n }\n\n // TODO make this more performant, see implementation in\n // array-backed-moving-window - use same implementation\n get hasAllRowsWithinRange(): boolean {\n const { from, to } = this.#range;\n\n for (let i = from; i < to; i++) {\n if (this.getAtIndex(i) === undefined) {\n return false;\n }\n }\n return true;\n }\n}\n"],"names":[],"mappings":"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"}