@vuu-ui/vuu-table 0.13.113 → 0.13.115-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/Row.js +16 -19
- package/cjs/Row.js.map +1 -1
- package/cjs/Table.js +8 -15
- package/cjs/Table.js.map +1 -1
- package/cjs/bulk-edit/useBulkEditPanel.js +6 -7
- package/cjs/bulk-edit/useBulkEditPanel.js.map +1 -1
- package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +2 -3
- package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -1
- package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +2 -3
- package/cjs/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +1 -1
- package/cjs/cell-renderers/input-cell/InputCell.js +3 -5
- package/cjs/cell-renderers/input-cell/InputCell.js.map +1 -1
- package/cjs/cell-renderers/toggle-cell/ToggleCell.js +5 -6
- package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +1 -1
- package/cjs/data-row/DataRow.js +144 -0
- package/cjs/data-row/DataRow.js.map +1 -0
- package/cjs/index.js +2 -0
- package/cjs/index.js.map +1 -1
- package/cjs/table-cell/TableCell.js +6 -9
- package/cjs/table-cell/TableCell.js.map +1 -1
- package/cjs/table-cell/TableGroupCell.css.js +1 -1
- package/cjs/table-cell/TableGroupCell.js +7 -8
- package/cjs/table-cell/TableGroupCell.js.map +1 -1
- package/cjs/table-data-source/{moving-window.js → DataRowMovingWindow.js} +19 -29
- package/cjs/table-data-source/DataRowMovingWindow.js.map +1 -0
- package/cjs/table-data-source/useDataSource.js +67 -52
- package/cjs/table-data-source/useDataSource.js.map +1 -1
- package/cjs/useCellFocus.js +1 -0
- package/cjs/useCellFocus.js.map +1 -1
- package/cjs/useRowClassNameGenerators.js +2 -2
- package/cjs/useRowClassNameGenerators.js.map +1 -1
- package/cjs/useSelection.js +5 -6
- package/cjs/useSelection.js.map +1 -1
- package/cjs/useTable.js +26 -36
- package/cjs/useTable.js.map +1 -1
- package/cjs/useTableContextMenu.js +6 -10
- package/cjs/useTableContextMenu.js.map +1 -1
- package/cjs/useTableScroll.js +5 -21
- package/cjs/useTableScroll.js.map +1 -1
- package/cjs/useTableViewport.js +2 -2
- package/cjs/useTableViewport.js.map +1 -1
- package/esm/Row.js +17 -20
- package/esm/Row.js.map +1 -1
- package/esm/Table.js +9 -16
- package/esm/Table.js.map +1 -1
- package/esm/bulk-edit/useBulkEditPanel.js +7 -8
- package/esm/bulk-edit/useBulkEditPanel.js.map +1 -1
- package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +2 -3
- package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -1
- package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js +3 -4
- package/esm/cell-renderers/checkbox-row-selector/CheckboxRowSelectorCell.js.map +1 -1
- package/esm/cell-renderers/input-cell/InputCell.js +3 -5
- package/esm/cell-renderers/input-cell/InputCell.js.map +1 -1
- package/esm/cell-renderers/toggle-cell/ToggleCell.js +5 -6
- package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +1 -1
- package/esm/data-row/DataRow.js +142 -0
- package/esm/data-row/DataRow.js.map +1 -0
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -1
- package/esm/table-cell/TableCell.js +6 -9
- package/esm/table-cell/TableCell.js.map +1 -1
- package/esm/table-cell/TableGroupCell.css.js +1 -1
- package/esm/table-cell/TableGroupCell.js +8 -9
- package/esm/table-cell/TableGroupCell.js.map +1 -1
- package/esm/table-data-source/{moving-window.js → DataRowMovingWindow.js} +20 -30
- package/esm/table-data-source/DataRowMovingWindow.js.map +1 -0
- package/esm/table-data-source/useDataSource.js +68 -53
- package/esm/table-data-source/useDataSource.js.map +1 -1
- package/esm/useCellFocus.js +1 -0
- package/esm/useCellFocus.js.map +1 -1
- package/esm/useRowClassNameGenerators.js +2 -2
- package/esm/useRowClassNameGenerators.js.map +1 -1
- package/esm/useSelection.js +6 -7
- package/esm/useSelection.js.map +1 -1
- package/esm/useTable.js +27 -37
- package/esm/useTable.js.map +1 -1
- package/esm/useTableContextMenu.js +7 -11
- package/esm/useTableContextMenu.js.map +1 -1
- package/esm/useTableScroll.js +5 -21
- package/esm/useTableScroll.js.map +1 -1
- package/esm/useTableViewport.js +2 -2
- package/esm/useTableViewport.js.map +1 -1
- package/package.json +10 -10
- package/types/Row.d.ts +1 -1
- package/types/Table.d.ts +1 -12
- package/types/cell-renderers/checkbox-cell/CheckboxCell.d.ts +1 -1
- package/types/cell-renderers/input-cell/InputCell.d.ts +1 -1
- package/types/data-row/DataRow.d.ts +16 -0
- package/types/index.d.ts +1 -0
- package/types/table-cell/TableCell.d.ts +1 -1
- package/types/table-cell/TableGroupCell.d.ts +1 -1
- package/types/table-data-source/DataRowMovingWindow.d.ts +24 -0
- package/types/table-data-source/useDataSource.d.ts +5 -6
- package/types/useTable.d.ts +5 -7
- package/types/useTableContextMenu.d.ts +5 -7
- package/types/useTableScroll.d.ts +1 -3
- package/cjs/table-data-source/moving-window.js.map +0 -1
- package/esm/table-data-source/moving-window.js.map +0 -1
- package/types/table-data-source/moving-window.d.ts +0 -23
|
@@ -21,9 +21,8 @@ const getValueList = ({ name, type }) => {
|
|
|
21
21
|
};
|
|
22
22
|
const ToggleCell = react.memo(function ToggleCell2({
|
|
23
23
|
column,
|
|
24
|
-
|
|
25
|
-
onEdit
|
|
26
|
-
row
|
|
24
|
+
dataRow,
|
|
25
|
+
onEdit
|
|
27
26
|
}) {
|
|
28
27
|
const targetWindow = window.useWindow();
|
|
29
28
|
styles.useComponentCssInjection({
|
|
@@ -32,8 +31,7 @@ const ToggleCell = react.memo(function ToggleCell2({
|
|
|
32
31
|
window: targetWindow
|
|
33
32
|
});
|
|
34
33
|
const values = getValueList(column);
|
|
35
|
-
const
|
|
36
|
-
const value = row[dataIdx];
|
|
34
|
+
const value = dataRow[column.name];
|
|
37
35
|
const handleCommit = react.useCallback(
|
|
38
36
|
async (evt, newValue) => {
|
|
39
37
|
const res = await onEdit?.(
|
|
@@ -50,11 +48,12 @@ const ToggleCell = react.memo(function ToggleCell2({
|
|
|
50
48
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
51
49
|
vuuUiControls.CycleStateButton,
|
|
52
50
|
{
|
|
51
|
+
appearance: "solid",
|
|
53
52
|
className: cx(classBase, `${classBase}-${column.name}`),
|
|
54
53
|
onCommit: handleCommit,
|
|
54
|
+
sentiment: "accented",
|
|
55
55
|
value,
|
|
56
56
|
values,
|
|
57
|
-
variant: "cta",
|
|
58
57
|
children: value
|
|
59
58
|
}
|
|
60
59
|
);
|
|
@@ -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
|
|
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":["isTypeDescriptor","isValueListRenderer","memo","ToggleCell","useWindow","useComponentCssInjection","toggleCellCss","useCallback","isRpcSuccess","dispatchCustomEvent","jsx","CycleStateButton","dataColumnAndKeyUnchanged","registerComponent"],"mappings":";;;;;;;;;;;AAsBA,MAAM,SAAY,GAAA,oBAAA;AAElB,MAAM,YAAe,GAAA,CAAC,EAAE,IAAA,EAAM,MAA6B,KAAA;AACzD,EAAA,IAAIA,0BAAiB,IAAI,CAAA,IAAKC,4BAAoB,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,GAAaC,UAAK,CAAA,SAASC,WAAW,CAAA;AAAA,EACjD,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAA2B,EAAA;AACzB,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;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,GAAAC,iBAAA;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,IAAAC,qBAAA,CAAa,GAAG,CAAG,EAAA;AACrB,QAAoBC,4BAAA,CAAA,GAAA,CAAI,QAAuB,YAAY,CAAA;AAAA;AAE7D,MAAO,OAAA,GAAA;AAAA,KACT;AAAA,IACA,CAAC,QAAQ,KAAK;AAAA,GAChB;AAEA,EACE,uBAAAC,cAAA;AAAA,IAACC,8BAAA;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,EAAGC,kCAAyB;AAE5BC,0BAAkB,CAAA,aAAA,EAAe,YAAY,eAAiB,EAAA;AAAA,EAC5D,aAAe,EAAA;AACjB,CAAC,CAAA;;;;"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const dataRowIntrinsicAttributes = {
|
|
4
|
+
childCount: true,
|
|
5
|
+
depth: true,
|
|
6
|
+
index: true,
|
|
7
|
+
isExpanded: true,
|
|
8
|
+
isSelected: true,
|
|
9
|
+
isLeaf: true,
|
|
10
|
+
key: true,
|
|
11
|
+
renderIndex: true
|
|
12
|
+
};
|
|
13
|
+
const dataRowOperations = {
|
|
14
|
+
hasColumn: true
|
|
15
|
+
};
|
|
16
|
+
const isDataRowIntrinsicAttribute = (attrName) => dataRowIntrinsicAttributes[attrName] === true;
|
|
17
|
+
const isDataRowOperation = (attrName) => dataRowOperations[attrName] === true;
|
|
18
|
+
const stringNumericTypes = {
|
|
19
|
+
long: true,
|
|
20
|
+
scaleddecimal2: true,
|
|
21
|
+
scaleddecimal4: true,
|
|
22
|
+
scaleddecimal6: true,
|
|
23
|
+
scaleddecimal8: true
|
|
24
|
+
};
|
|
25
|
+
const isStringNumericType = (type) => stringNumericTypes[type] === true;
|
|
26
|
+
const MAX_DECIMALS = "0000000";
|
|
27
|
+
const injectDecimalPoint = (value, decimal) => {
|
|
28
|
+
if (value === "0") {
|
|
29
|
+
return "0";
|
|
30
|
+
} else if (value.length < decimal) {
|
|
31
|
+
return `0.${(MAX_DECIMALS + value).slice(-decimal)}`;
|
|
32
|
+
} else {
|
|
33
|
+
return `${value.slice(0, -decimal)}.${value.slice(-decimal)}`;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const formatStringNumeric = (value, type) => {
|
|
37
|
+
switch (type) {
|
|
38
|
+
case "long":
|
|
39
|
+
return value;
|
|
40
|
+
case "scaleddecimal2":
|
|
41
|
+
return injectDecimalPoint(value, 2);
|
|
42
|
+
case "scaleddecimal4":
|
|
43
|
+
return injectDecimalPoint(value, 4);
|
|
44
|
+
case "scaleddecimal6":
|
|
45
|
+
return injectDecimalPoint(value, 6);
|
|
46
|
+
case "scaleddecimal8":
|
|
47
|
+
return injectDecimalPoint(value, 8);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
function DataRowImpl(data, columnMap) {
|
|
51
|
+
const target = {};
|
|
52
|
+
const jsonSerializer = () => {
|
|
53
|
+
return Object.entries(columnMap).reduce(
|
|
54
|
+
(json, [name, mapEntry]) => {
|
|
55
|
+
if (mapEntry) {
|
|
56
|
+
json[name] = data[mapEntry.index];
|
|
57
|
+
}
|
|
58
|
+
return json;
|
|
59
|
+
},
|
|
60
|
+
{}
|
|
61
|
+
);
|
|
62
|
+
};
|
|
63
|
+
const DataRowOperations2 = {
|
|
64
|
+
hasColumn: (name) => columnMap[name] !== void 0
|
|
65
|
+
};
|
|
66
|
+
return new Proxy(target, {
|
|
67
|
+
get(_obj, prop) {
|
|
68
|
+
if (typeof prop === "symbol") {
|
|
69
|
+
return void 0;
|
|
70
|
+
} else if (prop === "toJSON") {
|
|
71
|
+
return jsonSerializer;
|
|
72
|
+
} else if (prop === "toString") {
|
|
73
|
+
return "DataRow";
|
|
74
|
+
} else if (prop === "$$typeof") {
|
|
75
|
+
return void 0;
|
|
76
|
+
} else if (isDataRowOperation(prop)) {
|
|
77
|
+
return DataRowOperations2[prop];
|
|
78
|
+
}
|
|
79
|
+
const columnMapEntry = columnMap[prop];
|
|
80
|
+
if (columnMapEntry === void 0) {
|
|
81
|
+
console.warn(`[DataRow:Proxy] unknown column ${prop}`);
|
|
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
|
+
exports.dataRowFactory = 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 console.warn(`[DataRow:Proxy] unknown column ${prop}`);\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/cjs/index.js
CHANGED
|
@@ -26,6 +26,7 @@ var useTableContextMenu = require('./useTableContextMenu.js');
|
|
|
26
26
|
var useTableScroll = require('./useTableScroll.js');
|
|
27
27
|
var useTableViewport = require('./useTableViewport.js');
|
|
28
28
|
var VirtualColSpan = require('./VirtualColSpan.js');
|
|
29
|
+
var DataRow = require('./data-row/DataRow.js');
|
|
29
30
|
|
|
30
31
|
|
|
31
32
|
|
|
@@ -61,4 +62,5 @@ exports.noScrolling = useTableScroll.noScrolling;
|
|
|
61
62
|
exports.useTableScroll = useTableScroll.useTableScroll;
|
|
62
63
|
exports.useTableViewport = useTableViewport.useTableViewport;
|
|
63
64
|
exports.VirtualColSpan = VirtualColSpan.VirtualColSpan;
|
|
65
|
+
exports.dataRowFactory = DataRow.dataRowFactory;
|
|
64
66
|
//# sourceMappingURL=index.js.map
|
package/cjs/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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -12,10 +12,9 @@ var TableCell$1 = require('./TableCell.css.js');
|
|
|
12
12
|
const classBase = "vuuTableCell";
|
|
13
13
|
const TableCell = ({
|
|
14
14
|
column,
|
|
15
|
-
|
|
15
|
+
dataRow,
|
|
16
16
|
onClick,
|
|
17
17
|
onDataEdited,
|
|
18
|
-
row,
|
|
19
18
|
searchPattern = ""
|
|
20
19
|
}) => {
|
|
21
20
|
const targetWindow = window.useWindow();
|
|
@@ -27,7 +26,6 @@ const TableCell = ({
|
|
|
27
26
|
const [hasError, setHasError] = react.useState(false);
|
|
28
27
|
const { className, style } = useCell.useCell(column, classBase, false, hasError);
|
|
29
28
|
const { ariaColIndex, CellRenderer, valueFormatter } = column;
|
|
30
|
-
const dataIdx = columnMap[column.name];
|
|
31
29
|
const handleDataItemEdited = react.useCallback(
|
|
32
30
|
(editState, editPhase) => {
|
|
33
31
|
if (editPhase === "commit") {
|
|
@@ -40,7 +38,7 @@ const TableCell = ({
|
|
|
40
38
|
return onDataEdited?.(
|
|
41
39
|
{
|
|
42
40
|
...editState,
|
|
43
|
-
|
|
41
|
+
dataRow,
|
|
44
42
|
columnName: column.name,
|
|
45
43
|
value: typedValue
|
|
46
44
|
},
|
|
@@ -51,7 +49,7 @@ const TableCell = ({
|
|
|
51
49
|
onDataEdited?.(
|
|
52
50
|
{
|
|
53
51
|
...editState,
|
|
54
|
-
|
|
52
|
+
dataRow,
|
|
55
53
|
columnName: column.name
|
|
56
54
|
},
|
|
57
55
|
editPhase
|
|
@@ -59,7 +57,7 @@ const TableCell = ({
|
|
|
59
57
|
return void 0;
|
|
60
58
|
}
|
|
61
59
|
},
|
|
62
|
-
[column,
|
|
60
|
+
[column, dataRow, onDataEdited]
|
|
63
61
|
);
|
|
64
62
|
const handleClick = react.useCallback(
|
|
65
63
|
(evt) => {
|
|
@@ -67,7 +65,7 @@ const TableCell = ({
|
|
|
67
65
|
},
|
|
68
66
|
[column, onClick]
|
|
69
67
|
);
|
|
70
|
-
const value = valueFormatter(
|
|
68
|
+
const value = valueFormatter(dataRow[column.name]);
|
|
71
69
|
const valueWithHighlighting = useHighlighting.useHighlighting(value, searchPattern);
|
|
72
70
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
73
71
|
"div",
|
|
@@ -81,9 +79,8 @@ const TableCell = ({
|
|
|
81
79
|
CellRenderer,
|
|
82
80
|
{
|
|
83
81
|
column,
|
|
84
|
-
|
|
82
|
+
dataRow,
|
|
85
83
|
onEdit: handleDataItemEdited,
|
|
86
|
-
row,
|
|
87
84
|
searchPattern
|
|
88
85
|
}
|
|
89
86
|
) : 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
|
|
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":["useWindow","useComponentCssInjection","tableCellCss","useState","useCell","useCallback","getTypedValue","useHighlighting","jsx"],"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,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAAC,WAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,eAAS,KAAK,CAAA;AAE9C,EAAM,MAAA,EAAE,WAAW,KAAM,EAAA,GAAIC,gBAAQ,MAAQ,EAAA,SAAA,EAAW,OAAO,QAAQ,CAAA;AACvE,EAAA,MAAM,EAAE,YAAA,EAAc,YAAc,EAAA,cAAA,EAAmB,GAAA,MAAA;AAGvD,EAAA,MAAM,oBAAuB,GAAAC,iBAAA;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,GAAAC,sBAAA;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,GAAAD,iBAAA;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,GAAwBE,+BAAgB,CAAA,KAAA,EAAO,aAAa,CAAA;AAElE,EACE,uBAAAC,cAAA;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,mBAAAA,cAAA;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,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
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 .
|
|
3
|
+
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}";
|
|
4
4
|
|
|
5
5
|
module.exports = tableGroupCellCss;
|
|
6
6
|
//# sourceMappingURL=TableGroupCell.css.js.map
|
|
@@ -12,13 +12,11 @@ var TableCell = require('./TableCell.css.js');
|
|
|
12
12
|
var TableGroupCell$1 = require('./TableGroupCell.css.js');
|
|
13
13
|
var useHighlighting = require('../useHighlighting.js');
|
|
14
14
|
|
|
15
|
-
const { COUNT, IS_EXPANDED, IS_LEAF } = vuuUtils.metadataKeys;
|
|
16
15
|
const classBase = "vuuTableGroupCell";
|
|
17
16
|
const TableGroupCell = ({
|
|
18
17
|
column,
|
|
19
|
-
|
|
18
|
+
dataRow,
|
|
20
19
|
onClick,
|
|
21
|
-
row,
|
|
22
20
|
searchPattern = ""
|
|
23
21
|
}) => {
|
|
24
22
|
const targetWindow = window.useWindow();
|
|
@@ -33,9 +31,9 @@ const TableGroupCell = ({
|
|
|
33
31
|
window: targetWindow
|
|
34
32
|
});
|
|
35
33
|
const { columns } = column;
|
|
36
|
-
const value = vuuUtils.getGroupValue(columns,
|
|
34
|
+
const value = vuuUtils.getGroupValue(columns, dataRow);
|
|
37
35
|
const valueWithHighlighting = useHighlighting.useHighlighting(value || "", searchPattern);
|
|
38
|
-
const icon = vuuUtils.getGroupIcon(columns,
|
|
36
|
+
const icon = vuuUtils.getGroupIcon(columns, dataRow);
|
|
39
37
|
const { className, style } = useCell.useCell(column, classBase);
|
|
40
38
|
const handleClick = react.useCallback(
|
|
41
39
|
(evt) => {
|
|
@@ -43,7 +41,8 @@ const TableGroupCell = ({
|
|
|
43
41
|
},
|
|
44
42
|
[column, onClick]
|
|
45
43
|
);
|
|
46
|
-
const {
|
|
44
|
+
const { childCount, isExpanded, isLeaf } = dataRow;
|
|
45
|
+
const isLeafNode = isLeaf || childCount == 0;
|
|
47
46
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
48
47
|
"div",
|
|
49
48
|
{
|
|
@@ -51,10 +50,10 @@ const TableGroupCell = ({
|
|
|
51
50
|
className: cx(className, "vuuTableCell"),
|
|
52
51
|
role: "cell",
|
|
53
52
|
style,
|
|
54
|
-
onClick:
|
|
53
|
+
onClick: isLeafNode ? void 0 : handleClick,
|
|
55
54
|
children: [
|
|
56
55
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-spacer` }),
|
|
57
|
-
|
|
56
|
+
isLeafNode ? null : /* @__PURE__ */ jsxRuntime.jsx(vuuUiControls.ToggleIconButton, { isExpanded }),
|
|
58
57
|
icon ? /* @__PURE__ */ jsxRuntime.jsx(vuuUiControls.Icon, { name: icon }) : null,
|
|
59
58
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-label`, children: valueWithHighlighting })
|
|
60
59
|
]
|
|
@@ -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
|
|
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":["useWindow","useComponentCssInjection","tableCellCss","tableGroupCellCss","getGroupValue","useHighlighting","getGroupIcon","useCell","useCallback","jsxs","jsx","ToggleIconButton","Icon"],"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,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAAC,SAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AACD,EAAyBD,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,sBAAA;AAAA,IACR,GAAK,EAAAE,gBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,EAAE,SAAY,GAAA,MAAA;AACpB,EAAM,MAAA,KAAA,GAAQC,sBAAc,CAAA,OAAA,EAAS,OAAO,CAAA;AAC5C,EAAA,MAAM,qBAAwB,GAAAC,+BAAA,CAAgB,KAAS,IAAA,EAAA,EAAI,aAAa,CAAA;AAExE,EAAM,MAAA,IAAA,GAAOC,qBAAa,CAAA,OAAA,EAAS,OAAO,CAAA;AAC1C,EAAA,MAAM,EAAE,SAAW,EAAA,KAAA,EAAU,GAAAC,eAAA,CAAQ,QAAQ,SAAS,CAAA;AAEtD,EAAA,MAAM,WAAc,GAAAC,iBAAA;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,uBAAAC,eAAA;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,wBAAAC,cAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,CAAW,OAAA,CAAA,EAAA,CAAA;AAAA,QACvC,UAAa,GAAA,IAAA,mBAAQA,cAAA,CAAAC,8BAAA,EAAA,EAAiB,UAAwB,EAAA,CAAA;AAAA,QAC9D,IAAO,mBAAAD,cAAA,CAACE,kBAAK,EAAA,EAAA,IAAA,EAAM,MAAM,CAAK,GAAA,IAAA;AAAA,uCAC9B,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAW,QAAsB,EAAA,qBAAA,EAAA;AAAA;AAAA;AAAA,GAChE;AAEJ;;;;"}
|
|
@@ -13,8 +13,7 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
|
|
|
13
13
|
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);
|
|
14
14
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
15
15
|
var _range;
|
|
16
|
-
|
|
17
|
-
class MovingWindow {
|
|
16
|
+
class MovingDataRowWindow {
|
|
18
17
|
constructor({ from, to }) {
|
|
19
18
|
__publicField(this, "data");
|
|
20
19
|
__publicField(this, "rowCount", 0);
|
|
@@ -30,7 +29,7 @@ class MovingWindow {
|
|
|
30
29
|
this.rowCount = 0;
|
|
31
30
|
}
|
|
32
31
|
add(data) {
|
|
33
|
-
const
|
|
32
|
+
const { index } = data;
|
|
34
33
|
if (this.isWithinRange(index)) {
|
|
35
34
|
const internalIndex = index - __privateGet(this, _range).from;
|
|
36
35
|
this.data[internalIndex] = data;
|
|
@@ -39,6 +38,9 @@ class MovingWindow {
|
|
|
39
38
|
getAtIndex(index) {
|
|
40
39
|
return __privateGet(this, _range).isWithin(index) && this.data[index - __privateGet(this, _range).from] != null ? this.data[index - __privateGet(this, _range).from] : void 0;
|
|
41
40
|
}
|
|
41
|
+
getByKey(key) {
|
|
42
|
+
return this.data.find((row) => row.key === key);
|
|
43
|
+
}
|
|
42
44
|
isWithinRange(index) {
|
|
43
45
|
return __privateGet(this, _range).isWithin(index);
|
|
44
46
|
}
|
|
@@ -59,37 +61,25 @@ class MovingWindow {
|
|
|
59
61
|
}
|
|
60
62
|
}
|
|
61
63
|
getSelectedRows() {
|
|
62
|
-
return this.data.filter((
|
|
64
|
+
return this.data.filter((dataRow) => dataRow.isSelected);
|
|
63
65
|
}
|
|
64
|
-
get
|
|
65
|
-
return
|
|
66
|
+
get hasData() {
|
|
67
|
+
return this.data.some((d) => d !== void 0);
|
|
66
68
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
/**
|
|
70
|
+
* This will throw if there is no data. Check `hasData` first
|
|
71
|
+
* to guard against this, if not certain.
|
|
72
|
+
*/
|
|
73
|
+
get firstRow() {
|
|
70
74
|
for (let i = 0; i < this.data.length; i++) {
|
|
71
75
|
if (this.data[i]) {
|
|
72
|
-
|
|
73
|
-
} else {
|
|
74
|
-
data.push([from + i, from + i, true, false, 1, 0, "", 0, 0, false]);
|
|
76
|
+
return this.data[i];
|
|
75
77
|
}
|
|
76
78
|
}
|
|
77
|
-
|
|
79
|
+
throw Error(`[DataRowMovingWinddow] firstRow, no data`);
|
|
78
80
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
* is removed.
|
|
82
|
-
*/
|
|
83
|
-
spliceDataAtIndex(index) {
|
|
84
|
-
if (index >= 10) {
|
|
85
|
-
for (let i = 0; i < this.data.length; i++) {
|
|
86
|
-
if (this.data[i]) {
|
|
87
|
-
this.data[i] = this.data[i].toSpliced(index, 1);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
} else {
|
|
91
|
-
throw Error(`[MovingWindow] canno splir metadata value from Row`);
|
|
92
|
-
}
|
|
81
|
+
get range() {
|
|
82
|
+
return __privateGet(this, _range);
|
|
93
83
|
}
|
|
94
84
|
// TODO make this more performant, see implementation in
|
|
95
85
|
// array-backed-moving-window - use same implementation
|
|
@@ -105,5 +95,5 @@ class MovingWindow {
|
|
|
105
95
|
}
|
|
106
96
|
_range = new WeakMap();
|
|
107
97
|
|
|
108
|
-
exports.
|
|
109
|
-
//# sourceMappingURL=
|
|
98
|
+
exports.MovingDataRowWindow = MovingDataRowWindow;
|
|
99
|
+
//# 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":["WindowRange"],"mappings":"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"}
|