@vuu-ui/vuu-utils 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.
- package/cjs/packages/vuu-utils/src/column-utils.js +14 -10
- package/cjs/packages/vuu-utils/src/column-utils.js.map +1 -1
- package/cjs/packages/vuu-utils/src/component-registry.js +8 -4
- package/cjs/packages/vuu-utils/src/component-registry.js.map +1 -1
- package/cjs/packages/vuu-utils/src/filters/filter-utils.js +2 -0
- package/cjs/packages/vuu-utils/src/filters/filter-utils.js.map +1 -1
- package/cjs/packages/vuu-utils/src/formatting-utils.js +20 -1
- package/cjs/packages/vuu-utils/src/formatting-utils.js.map +1 -1
- package/cjs/packages/vuu-utils/src/index.js +3 -2
- package/cjs/packages/vuu-utils/src/index.js.map +1 -1
- package/cjs/packages/vuu-utils/src/round-decimal.js +40 -2
- package/cjs/packages/vuu-utils/src/round-decimal.js.map +1 -1
- package/cjs/packages/vuu-utils/src/row-utils.js +3 -3
- package/cjs/packages/vuu-utils/src/row-utils.js.map +1 -1
- package/cjs/packages/vuu-utils/src/tree-utils.js.map +1 -1
- package/esm/packages/vuu-utils/src/column-utils.js +14 -10
- package/esm/packages/vuu-utils/src/column-utils.js.map +1 -1
- package/esm/packages/vuu-utils/src/component-registry.js +8 -4
- package/esm/packages/vuu-utils/src/component-registry.js.map +1 -1
- package/esm/packages/vuu-utils/src/filters/filter-utils.js +2 -1
- package/esm/packages/vuu-utils/src/filters/filter-utils.js.map +1 -1
- package/esm/packages/vuu-utils/src/formatting-utils.js +21 -2
- package/esm/packages/vuu-utils/src/formatting-utils.js.map +1 -1
- package/esm/packages/vuu-utils/src/index.js +2 -3
- package/esm/packages/vuu-utils/src/index.js.map +1 -1
- package/esm/packages/vuu-utils/src/round-decimal.js +39 -3
- package/esm/packages/vuu-utils/src/round-decimal.js.map +1 -1
- package/esm/packages/vuu-utils/src/row-utils.js +3 -3
- package/esm/packages/vuu-utils/src/row-utils.js.map +1 -1
- package/esm/packages/vuu-utils/src/tree-utils.js.map +1 -1
- package/package.json +6 -6
- package/types/column-utils.d.ts +13 -13
- package/types/component-registry.d.ts +7 -7
- package/types/data-utils.d.ts +1 -1
- package/types/filters/filter-utils.d.ts +2 -1
- package/types/formatting-utils.d.ts +1 -1
- package/types/index.d.ts +0 -1
- package/types/round-decimal.d.ts +2 -0
- package/types/row-utils.d.ts +2 -1
- package/cjs/packages/vuu-utils/src/DataWindow.js +0 -76
- package/cjs/packages/vuu-utils/src/DataWindow.js.map +0 -1
- package/esm/packages/vuu-utils/src/DataWindow.js +0 -74
- package/esm/packages/vuu-utils/src/DataWindow.js.map +0 -1
- package/types/DataWindow.d.ts +0 -39
|
@@ -2,7 +2,7 @@ import { isDateTimeDataValue, isTypeDescriptor, isMappedValueTypeRenderer } from
|
|
|
2
2
|
import './date/date-utils.js';
|
|
3
3
|
import { dateTimePattern } from './date/dateTimePattern.js';
|
|
4
4
|
import { formatDate } from './date/formatter.js';
|
|
5
|
-
import { roundDecimal } from './round-decimal.js';
|
|
5
|
+
import { roundScaledDecimal, roundDecimal } from './round-decimal.js';
|
|
6
6
|
|
|
7
7
|
const DEFAULT_NUMERIC_FORMAT = {};
|
|
8
8
|
const defaultValueFormatter = (value) => value == null ? "" : typeof value === "string" ? value : value.toString();
|
|
@@ -19,6 +19,7 @@ const dateFormatter = (column) => {
|
|
|
19
19
|
};
|
|
20
20
|
const numericFormatter = ({
|
|
21
21
|
align = "right",
|
|
22
|
+
serverDataType,
|
|
22
23
|
type
|
|
23
24
|
}) => {
|
|
24
25
|
if (type === void 0 || typeof type === "string") {
|
|
@@ -32,6 +33,23 @@ const numericFormatter = ({
|
|
|
32
33
|
zeroPad = false
|
|
33
34
|
} = type.formatting ?? DEFAULT_NUMERIC_FORMAT;
|
|
34
35
|
return (value) => {
|
|
36
|
+
if (serverDataType?.startsWith("scaleddecimal")) {
|
|
37
|
+
if (typeof value === "string") {
|
|
38
|
+
return roundScaledDecimal(
|
|
39
|
+
value,
|
|
40
|
+
align,
|
|
41
|
+
decimals,
|
|
42
|
+
zeroPad,
|
|
43
|
+
alignOnDecimals,
|
|
44
|
+
useLocaleString,
|
|
45
|
+
roundingRule
|
|
46
|
+
);
|
|
47
|
+
} else {
|
|
48
|
+
throw Error(
|
|
49
|
+
`[formatting-utils] numericFormatter, invalid data for ${serverDataType}: '${value}'`
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
35
53
|
if (typeof value === "string" && (value.startsWith("\u03A3") || value.startsWith("["))) {
|
|
36
54
|
return value;
|
|
37
55
|
}
|
|
@@ -53,6 +71,7 @@ const mapFormatter = (map) => {
|
|
|
53
71
|
return map[value] ?? "";
|
|
54
72
|
};
|
|
55
73
|
};
|
|
74
|
+
const NumericTypes = ["decimal", "number"];
|
|
56
75
|
const getValueFormatter = (column, serverDataType = column.serverDataType) => {
|
|
57
76
|
if (isDateTimeDataValue(column)) {
|
|
58
77
|
return dateFormatter(column);
|
|
@@ -60,7 +79,7 @@ const getValueFormatter = (column, serverDataType = column.serverDataType) => {
|
|
|
60
79
|
const { type } = column;
|
|
61
80
|
if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type?.renderer)) {
|
|
62
81
|
return mapFormatter(type.renderer.map);
|
|
63
|
-
} else if (serverDataType === "double" || isTypeDescriptor(type) && type.name
|
|
82
|
+
} else if (serverDataType === "double" || isTypeDescriptor(type) && NumericTypes.includes(type.name)) {
|
|
64
83
|
return numericFormatter(column);
|
|
65
84
|
} else if (serverDataType === "string" || serverDataType === "char") {
|
|
66
85
|
return (value) => value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatting-utils.js","sources":["../../../../../../packages/vuu-utils/src/formatting-utils.ts"],"sourcesContent":["import { DataValueDescriptor } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n ColumnTypeFormatting,\n ColumnTypeValueMap,\n ValueFormatter,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n isDateTimeDataValue,\n isMappedValueTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\nimport { dateTimePattern, formatDate } from \"./date\";\nimport { roundDecimal } from \"./round-decimal\";\n\nexport type ValueFormatters = {\n [key: string]: ValueFormatter;\n};\n\nconst DEFAULT_NUMERIC_FORMAT: ColumnTypeFormatting = {};\n\nexport const defaultValueFormatter = (value: unknown) =>\n value == null ? \"\" : typeof value === \"string\" ? value : value.toString();\n\nconst dateFormatter = (column: DataValueDescriptor) => {\n const pattern = dateTimePattern(column.type);\n const formatter = formatDate(pattern);\n\n return (value: unknown) => {\n if (typeof value === \"number\" && value !== 0) {\n return formatter(new Date(value));\n } else {\n return \"\";\n }\n };\n};\n\nexport const numericFormatter = ({\n align = \"right\",\n type,\n}: Partial<ColumnDescriptor>) => {\n if (type === undefined || typeof type === \"string\") {\n return defaultValueFormatter;\n } else {\n const {\n alignOnDecimals = false,\n decimals,\n roundingRule,\n useLocaleString,\n zeroPad = false,\n } = type.formatting ?? DEFAULT_NUMERIC_FORMAT;\n return (value: unknown) => {\n if (\n typeof value === \"string\" &&\n (value.startsWith(\"Σ\") || value.startsWith(\"[\"))\n ) {\n return value;\n }\n const number =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? parseFloat(value)\n : undefined;\n return roundDecimal(\n number,\n align,\n decimals,\n zeroPad,\n alignOnDecimals,\n useLocaleString,\n roundingRule,\n );\n };\n }\n};\n\nconst mapFormatter = (map: ColumnTypeValueMap) => {\n return (value: unknown) => {\n return map[value as string] ?? \"\";\n };\n};\n\nexport const getValueFormatter = (\n column: ColumnDescriptor,\n serverDataType = column.serverDataType,\n): ValueFormatter => {\n if (isDateTimeDataValue(column)) {\n return dateFormatter(column);\n }\n\n const { type } = column;\n if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type?.renderer)) {\n return mapFormatter(type.renderer.map);\n } else if (\n serverDataType === \"double\" ||\n (isTypeDescriptor(type) && type.name
|
|
1
|
+
{"version":3,"file":"formatting-utils.js","sources":["../../../../../../packages/vuu-utils/src/formatting-utils.ts"],"sourcesContent":["import { DataValueDescriptor } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnDescriptor,\n ColumnTypeFormatting,\n ColumnTypeValueMap,\n ValueFormatter,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n isDateTimeDataValue,\n isMappedValueTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\nimport { dateTimePattern, formatDate } from \"./date\";\nimport { roundDecimal, roundScaledDecimal } from \"./round-decimal\";\n\nexport type ValueFormatters = {\n [key: string]: ValueFormatter;\n};\n\nconst DEFAULT_NUMERIC_FORMAT: ColumnTypeFormatting = {};\n\nexport const defaultValueFormatter = (value: unknown) =>\n value == null ? \"\" : typeof value === \"string\" ? value : value.toString();\n\nconst dateFormatter = (column: DataValueDescriptor) => {\n const pattern = dateTimePattern(column.type);\n const formatter = formatDate(pattern);\n\n return (value: unknown) => {\n if (typeof value === \"number\" && value !== 0) {\n return formatter(new Date(value));\n } else {\n return \"\";\n }\n };\n};\n\nexport const numericFormatter = ({\n align = \"right\",\n serverDataType,\n type,\n}: Partial<ColumnDescriptor>) => {\n if (type === undefined || typeof type === \"string\") {\n return defaultValueFormatter;\n } else {\n const {\n alignOnDecimals = false,\n decimals,\n roundingRule,\n useLocaleString,\n zeroPad = false,\n } = type.formatting ?? DEFAULT_NUMERIC_FORMAT;\n return (value: unknown) => {\n if (serverDataType?.startsWith(\"scaleddecimal\")) {\n if (typeof value === \"string\") {\n return roundScaledDecimal(\n value,\n align,\n decimals,\n zeroPad,\n alignOnDecimals,\n useLocaleString,\n roundingRule,\n );\n } else {\n throw Error(\n `[formatting-utils] numericFormatter, invalid data for ${serverDataType}: '${value}'`,\n );\n }\n }\n if (\n typeof value === \"string\" &&\n (value.startsWith(\"Σ\") || value.startsWith(\"[\"))\n ) {\n return value;\n }\n const number =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? parseFloat(value)\n : undefined;\n return roundDecimal(\n number,\n align,\n decimals,\n zeroPad,\n alignOnDecimals,\n useLocaleString,\n roundingRule,\n );\n };\n }\n};\n\nconst mapFormatter = (map: ColumnTypeValueMap) => {\n return (value: unknown) => {\n return map[value as string] ?? \"\";\n };\n};\n\nconst NumericTypes = [\"decimal\", \"number\"];\n\nexport const getValueFormatter = (\n column: ColumnDescriptor,\n serverDataType = column.serverDataType,\n): ValueFormatter => {\n if (isDateTimeDataValue(column)) {\n return dateFormatter(column);\n }\n\n const { type } = column;\n if (isTypeDescriptor(type) && isMappedValueTypeRenderer(type?.renderer)) {\n return mapFormatter(type.renderer.map);\n } else if (\n serverDataType === \"double\" ||\n (isTypeDescriptor(type) && NumericTypes.includes(type.name))\n ) {\n return numericFormatter(column);\n } else if (serverDataType === \"string\" || serverDataType === \"char\") {\n return (value: unknown) => value as string;\n }\n return defaultValueFormatter;\n};\n\n/**\n * Lowercases a string and returns as Lowercase typescript type\n *\n * @param str the input string\n * @returns str converted to Lowercase\n */\nexport const lowerCase = (str: string) =>\n str.toLowerCase() as Lowercase<string>;\n"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,6 @@ export { boxContainsPoint, getCenteredBox, getPositionWithinBox, isGridLayoutSpl
|
|
|
7
7
|
export { AggregationType, addColumnToSubscribedColumns, applyDefaultColumnConfig, applyGroupByToColumns, applyRuntimeColumnWidthsToConfig, applySortToColumns, applyWidthToColumns, assertAllColumnsAreIncludedInSubscription, buildColumnMap, checkConfirmationPending, columnByAriaIndex, dataAndColumnUnchanged, dataColumnAndKeyUnchanged, dataSourceRowToDataRowDto, existingSort, extractGroupColumn, findColumn, flattenColumnGroup, fromServerDataType, getAllCellsInColumn, getAriaColIndex, getAriaRowIndex, getCalculatedColumnDetails, getColumnLabel, getColumnName, getColumnStyle, getColumnsInViewport, getDefaultAlignment, getDefaultColumnType, getGroupIcon, getGroupValue, getPinStateFromElement, getRuntimeColumnWidth, getTableHeadings, getTypeFormattingFromColumn, hasCustomRenderer, hasHeadings, hasValidationRules, isCalculatedColumn, isColumnTypeRenderer, isDataLoading, isDateTimeDataType, isDateTimeDataValue, isGroupColumn, isJsonAttribute, isJsonColumn, isJsonGroup, isLookupRenderer, isMappedValueTypeRenderer, isNotHidden, isNumericColumn, isPinned, isResizing, isStringColumn, isTextColumn, isTimeDataValue, isTimestampColumn, isTypeDescriptor, isValidColumnAlignment, isValidPinLocation, isValueListRenderer, isVuuColumnDataType, mapSortCriteria, measurePinnedColumns, metadataKeys, moveColumnTo, projectUpdates, removeSort, reorderColumnItems, replaceColumn, setAggregations, setCalculatedColumnExpression, setCalculatedColumnName, setCalculatedColumnType, sortPinnedColumns, subscribedOnly, toColumnDescriptor, toColumnName, toDataSourceColumns, updateColumn, updateColumnFormatting, updateColumnRenderProps, updateColumnType, visibleColumnAtIndex } from './column-utils.js';
|
|
8
8
|
export { getCookieValue, setCookieValue } from './cookie-utils.js';
|
|
9
9
|
export { getCellConfigPanelRenderer, getCellRenderer, getCellRendererOptions, getColumnHeaderContentRenderer, getColumnHeaderLabelRenderer, getConfigurationEditor, getEditRuleValidator, getLayoutComponent, getRegisteredCellRenderers, getRowClassNameGenerator, isContainer, isLayoutComponent, isView, registerComponent, registerConfigurationEditor } from './component-registry.js';
|
|
10
|
-
export { DataWindow } from './DataWindow.js';
|
|
11
10
|
export { Clock } from './Clock.js';
|
|
12
11
|
export { MEASURES } from './common-types.js';
|
|
13
12
|
export { importCSS } from './css-utils.js';
|
|
@@ -21,7 +20,7 @@ export { dateTimePattern, defaultPatternsByType, fallbackDateTimePattern } from
|
|
|
21
20
|
export { formatDate, getDateFormatter } from './date/formatter.js';
|
|
22
21
|
export { dateTimeLabelByType, isDatePattern, isTimePattern, supportedDateTimePatterns } from './date/types.js';
|
|
23
22
|
export { RangeMonitor } from './debug-utils.js';
|
|
24
|
-
export { applyFilterToColumns, extractFilterForColumn, filtersAreEqual, getColumnValueFromFilter, isAndFilter, isBetweenFilter, isBetweenOperator, isCompleteFilter, isExtendedFilter, isFilterClause, isFilteredColumn, isInFilter, isMultiClauseFilter, isMultiValueFilter, isNamedFilter, isOrFilter, isSerializableFilter, isSingleValueFilter, isValidFilterClauseOp, stripFilterFromColumns } from './filters/filter-utils.js';
|
|
23
|
+
export { applyFilterToColumns, extractFilterForColumn, filtersAreEqual, getColumnValueFromFilter, isAndFilter, isBetweenFilter, isBetweenOperator, isCompleteFilter, isExtendedFilter, isFilter, isFilterClause, isFilteredColumn, isInFilter, isMultiClauseFilter, isMultiValueFilter, isNamedFilter, isOrFilter, isSerializableFilter, isSingleValueFilter, isValidFilterClauseOp, stripFilterFromColumns } from './filters/filter-utils.js';
|
|
25
24
|
export { ONE_DAY_IN_MILLIS, dateFilterAsQuery, filterAsQuery } from './filters/filterAsQuery.js';
|
|
26
25
|
export { createEl, dispatchCustomEvent, dispatchKeyboardEvent, dispatchMouseEvent, focusFirstFocusableElement, getClosest, getClosestIndexItem, getElementByDataIndex, getElementDataIndex, getFocusableElement, getScrollbarSize, hasOpenOptionList, isDateInput, isInputElement, isSelectableElement, queryClosest } from './html-utils.js';
|
|
27
26
|
export { EventEmitter } from './event-emitter.js';
|
|
@@ -42,7 +41,7 @@ export { getLoggingConfigForWorker, logUnhandledMessage, logger } from './loggin
|
|
|
42
41
|
export { isModule } from './module-utils.js';
|
|
43
42
|
export { uuid } from './nanoid/index.js';
|
|
44
43
|
export { asReactElements, createSyntheticEvent, isSimpleStateValue, useIsMounted, useStableReference } from './react-utils.js';
|
|
45
|
-
export { roundDecimal } from './round-decimal.js';
|
|
44
|
+
export { exceedsMaxSafeInteger, roundDecimal, roundScaledDecimal } from './round-decimal.js';
|
|
46
45
|
export { debounce, throttle } from './perf-utils.js';
|
|
47
46
|
export { DeferredPromise } from './promise-utils.js';
|
|
48
47
|
export { INVALID_SESSION, INVALID_TOKEN, SESSION_LIMIT_EXCEEDED, TOKEN_EXPIRED, hasViewPortContext, isActionMessage, isCreateVpSuccess, isCustomComponentActionMessage, isLoginErrorMessage, isLoginResponse, isOpenDialogAction, isOpenSessionTableDialogMessage, isRequestResponse, isRpcError, isRpcServiceRequest, isRpcSuccess, isSelectRequest, isSelectSuccessWithRowCount, isSessionTable, isSessionTableActionMessage, isTypeaheadRequest, isVuuMenuRpcRequest } from './protocol-message-utils.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
const PUNCTUATION_STR = String.fromCharCode(8200);
|
|
2
2
|
const DIGIT_STR = String.fromCharCode(8199);
|
|
3
3
|
const DECIMALS_AUTO = -1;
|
|
4
|
+
const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER.toString();
|
|
5
|
+
const MAX_INTEGER_DIGITS = MAX_SAFE_INTEGER.length;
|
|
6
|
+
const exceedsMaxSafeInteger = (value) => value.length > MAX_INTEGER_DIGITS || value.length === MAX_INTEGER_DIGITS && value > MAX_SAFE_INTEGER;
|
|
4
7
|
const Space = {
|
|
5
8
|
DIGIT: DIGIT_STR,
|
|
6
9
|
TWO_DIGITS: DIGIT_STR + DIGIT_STR,
|
|
@@ -55,7 +58,9 @@ function roundDecimal(value, align = Align.Right, decimals = 4, zeroPad, alignOn
|
|
|
55
58
|
if (value === void 0 || typeof value !== "number" || isNaN(value)) {
|
|
56
59
|
return "";
|
|
57
60
|
}
|
|
58
|
-
let integral
|
|
61
|
+
let integral;
|
|
62
|
+
let fraction;
|
|
63
|
+
let Pad;
|
|
59
64
|
const [part1, part2 = ""] = value.toString().split(".");
|
|
60
65
|
const actualDecimals = part2.length;
|
|
61
66
|
integral = part1 === "-0" ? "-0" : useLocaleString ? parseFloat(part1).toLocaleString() : parseFloat(part1).toString();
|
|
@@ -73,7 +78,38 @@ function roundDecimal(value, align = Align.Right, decimals = 4, zeroPad, alignOn
|
|
|
73
78
|
} else {
|
|
74
79
|
if (Pad = zeroPad ? Zero : alignOnDecimals && align !== Align.Left ? Space : null) {
|
|
75
80
|
if (actualDecimals === 0) {
|
|
76
|
-
fraction = Pad.FULL_PADDING[decimals];
|
|
81
|
+
fraction = Pad.FULL_PADDING[decimals] ?? "";
|
|
82
|
+
} else {
|
|
83
|
+
fraction = pad(part2, decimals, Pad);
|
|
84
|
+
}
|
|
85
|
+
} else {
|
|
86
|
+
fraction = part2;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return integral + (fraction ? "." + fraction : "");
|
|
90
|
+
}
|
|
91
|
+
function roundScaledDecimal(value, align = Align.Right, decimals = 4, zeroPad, alignOnDecimals, useLocaleString = true, roundingRule = "round") {
|
|
92
|
+
let integral;
|
|
93
|
+
let fraction;
|
|
94
|
+
let Pad;
|
|
95
|
+
const [part1, part2 = ""] = value.split(".");
|
|
96
|
+
const actualDecimals = part2.length;
|
|
97
|
+
integral = part1 === "" ? "0" : part1 === "-0" ? "-0" : useLocaleString ? exceedsMaxSafeInteger(value) ? BigInt(part1).toLocaleString() : parseFloat(part1).toLocaleString() : part1;
|
|
98
|
+
if (align === Align.Left && alignOnDecimals) {
|
|
99
|
+
integral = padLeft(integral);
|
|
100
|
+
}
|
|
101
|
+
if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {
|
|
102
|
+
fraction = part2;
|
|
103
|
+
} else if (actualDecimals > decimals) {
|
|
104
|
+
if (roundingRule === "round") {
|
|
105
|
+
fraction = parseFloat("0." + part2).toFixed(decimals).slice(2);
|
|
106
|
+
} else {
|
|
107
|
+
fraction = part2.slice(0, decimals);
|
|
108
|
+
}
|
|
109
|
+
} else {
|
|
110
|
+
if (Pad = zeroPad ? Zero : alignOnDecimals && align !== Align.Left ? Space : null) {
|
|
111
|
+
if (actualDecimals === 0) {
|
|
112
|
+
fraction = Pad.FULL_PADDING[decimals] ?? "";
|
|
77
113
|
} else {
|
|
78
114
|
fraction = pad(part2, decimals, Pad);
|
|
79
115
|
}
|
|
@@ -84,5 +120,5 @@ function roundDecimal(value, align = Align.Right, decimals = 4, zeroPad, alignOn
|
|
|
84
120
|
return integral + (fraction ? "." + fraction : "");
|
|
85
121
|
}
|
|
86
122
|
|
|
87
|
-
export { roundDecimal };
|
|
123
|
+
export { exceedsMaxSafeInteger, roundDecimal, roundScaledDecimal };
|
|
88
124
|
//# sourceMappingURL=round-decimal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-decimal.js","sources":["../../../../../../packages/vuu-utils/src/round-decimal.ts"],"sourcesContent":["import { RoundingRule } from \"@vuu-ui/vuu-table-types\";\n\nconst PUNCTUATION_STR = String.fromCharCode(8200);\nconst DIGIT_STR = String.fromCharCode(8199);\nconst DECIMALS_AUTO = -1;\n\ntype PadMap = {\n DIGIT: string;\n TWO_DIGITS: string;\n THREE_DIGITS: string;\n FULL_PADDING: [null, string, string, string, string];\n};\n\nconst Space: PadMap = {\n DIGIT: DIGIT_STR,\n TWO_DIGITS: DIGIT_STR + DIGIT_STR,\n THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,\n FULL_PADDING: [\n null,\n PUNCTUATION_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n ],\n};\n\nconst Zero: PadMap = {\n DIGIT: \"0\",\n TWO_DIGITS: \"00\",\n THREE_DIGITS: \"000\",\n FULL_PADDING: [null, \"0\", \"00\", \"000\", \"0000\"],\n};\n\nfunction padLeft(value: string, maxLength = 6) {\n return (LEADING_FILL + value).slice(-maxLength);\n}\n\nconst LEADING_FILL =\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR;\n\nconst Align = {\n Right: \"right\",\n Center: \"center\",\n Left: \"left\",\n};\n\nfunction pad(n: string, dp: number, Pad: PadMap): string {\n let len = n.length;\n const diff = dp - len;\n\n if (diff > 0) {\n if (diff === 1) {\n n = n + Pad.DIGIT;\n } else if (diff === 2) {\n n = n + Pad.TWO_DIGITS;\n } else if (diff === 3) {\n n = n + Pad.THREE_DIGITS;\n }\n } else {\n if (diff < 0) {\n n = n.slice(0, dp);\n len = dp;\n }\n\n if (Pad === Space && n.charAt(len - 1) === \"0\") {\n n = n.replace(/0+$/, \"\");\n return pad(n, dp, Pad);\n }\n }\n return n;\n}\n\nexport function roundDecimal(\n value?: number,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean,\n useLocaleString = true,\n roundingRule: RoundingRule = \"round\",\n) {\n if (value === undefined || typeof value !== \"number\" || isNaN(value)) {\n return \"\";\n }\n let integral
|
|
1
|
+
{"version":3,"file":"round-decimal.js","sources":["../../../../../../packages/vuu-utils/src/round-decimal.ts"],"sourcesContent":["import { RoundingRule } from \"@vuu-ui/vuu-table-types\";\n\nconst PUNCTUATION_STR = String.fromCharCode(8200);\nconst DIGIT_STR = String.fromCharCode(8199);\nconst DECIMALS_AUTO = -1;\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER.toString();\nconst MAX_INTEGER_DIGITS = MAX_SAFE_INTEGER.length;\n\nexport const exceedsMaxSafeInteger = (value: string) =>\n value.length > MAX_INTEGER_DIGITS ||\n (value.length === MAX_INTEGER_DIGITS && value > MAX_SAFE_INTEGER);\n\ntype PadMap = {\n DIGIT: string;\n TWO_DIGITS: string;\n THREE_DIGITS: string;\n FULL_PADDING: [null, string, string, string, string];\n};\n\nconst Space: PadMap = {\n DIGIT: DIGIT_STR,\n TWO_DIGITS: DIGIT_STR + DIGIT_STR,\n THREE_DIGITS: DIGIT_STR + DIGIT_STR + DIGIT_STR,\n FULL_PADDING: [\n null,\n PUNCTUATION_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n PUNCTUATION_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR + DIGIT_STR,\n ],\n};\n\nconst Zero: PadMap = {\n DIGIT: \"0\",\n TWO_DIGITS: \"00\",\n THREE_DIGITS: \"000\",\n FULL_PADDING: [null, \"0\", \"00\", \"000\", \"0000\"],\n};\n\nfunction padLeft(value: string, maxLength = 6) {\n return (LEADING_FILL + value).slice(-maxLength);\n}\n\nconst LEADING_FILL =\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR +\n DIGIT_STR;\n\nconst Align = {\n Right: \"right\",\n Center: \"center\",\n Left: \"left\",\n};\n\nfunction pad(n: string, dp: number, Pad: PadMap): string {\n let len = n.length;\n const diff = dp - len;\n\n if (diff > 0) {\n if (diff === 1) {\n n = n + Pad.DIGIT;\n } else if (diff === 2) {\n n = n + Pad.TWO_DIGITS;\n } else if (diff === 3) {\n n = n + Pad.THREE_DIGITS;\n }\n } else {\n if (diff < 0) {\n n = n.slice(0, dp);\n len = dp;\n }\n\n if (Pad === Space && n.charAt(len - 1) === \"0\") {\n n = n.replace(/0+$/, \"\");\n return pad(n, dp, Pad);\n }\n }\n return n;\n}\n\nexport function roundDecimal(\n value?: number,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean,\n useLocaleString = true,\n roundingRule: RoundingRule = \"round\",\n) {\n if (value === undefined || typeof value !== \"number\" || isNaN(value)) {\n return \"\";\n }\n let integral: string;\n let fraction: string;\n let Pad: PadMap | null;\n\n const [part1, part2 = \"\"] = value.toString().split(\".\");\n const actualDecimals = part2.length;\n\n integral =\n part1 === \"-0\"\n ? \"-0\"\n : useLocaleString\n ? parseFloat(part1).toLocaleString()\n : parseFloat(part1).toString();\n\n if (align === Align.Left && alignOnDecimals) {\n integral = padLeft(integral);\n }\n\n if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {\n fraction = part2;\n } else if (actualDecimals > decimals) {\n if (roundingRule === \"round\") {\n fraction = parseFloat(\"0.\" + part2)\n .toFixed(decimals)\n .slice(2);\n } else {\n fraction = part2.slice(0, decimals);\n }\n } else {\n /* eslint-disable no-cond-assign */\n if (\n (Pad = zeroPad\n ? Zero\n : alignOnDecimals && align !== Align.Left\n ? Space\n : null)\n ) {\n if (actualDecimals === 0) {\n fraction = Pad.FULL_PADDING[decimals] ?? \"\";\n } else {\n fraction = pad(part2, decimals, Pad);\n }\n } else {\n fraction = part2;\n }\n }\n\n return integral + (fraction ? \".\" + fraction : \"\");\n}\n\nexport function roundScaledDecimal(\n value: string,\n align = Align.Right,\n decimals = 4,\n zeroPad?: boolean,\n alignOnDecimals?: boolean,\n useLocaleString = true,\n roundingRule: RoundingRule = \"round\",\n) {\n let integral: string;\n let fraction: string;\n let Pad: PadMap | null;\n\n const [part1, part2 = \"\"] = value.split(\".\");\n const actualDecimals = part2.length;\n\n integral =\n part1 === \"\"\n ? \"0\"\n : part1 === \"-0\"\n ? \"-0\"\n : useLocaleString\n ? exceedsMaxSafeInteger(value)\n ? BigInt(part1).toLocaleString()\n : parseFloat(part1).toLocaleString()\n : part1;\n\n if (align === Align.Left && alignOnDecimals) {\n integral = padLeft(integral);\n }\n\n if (decimals === DECIMALS_AUTO || actualDecimals === decimals) {\n fraction = part2;\n } else if (actualDecimals > decimals) {\n if (roundingRule === \"round\") {\n fraction = parseFloat(\"0.\" + part2)\n .toFixed(decimals)\n .slice(2);\n } else {\n fraction = part2.slice(0, decimals);\n }\n } else {\n /* eslint-disable no-cond-assign */\n if (\n (Pad = zeroPad\n ? Zero\n : alignOnDecimals && align !== Align.Left\n ? Space\n : null)\n ) {\n if (actualDecimals === 0) {\n fraction = Pad.FULL_PADDING[decimals] ?? \"\";\n } else {\n fraction = pad(part2, decimals, Pad);\n }\n } else {\n fraction = part2;\n }\n }\n\n return integral + (fraction ? \".\" + fraction : \"\");\n}\n"],"names":[],"mappings":"AAEA,MAAM,eAAA,GAAkB,MAAO,CAAA,YAAA,CAAa,IAAI,CAAA;AAChD,MAAM,SAAA,GAAY,MAAO,CAAA,YAAA,CAAa,IAAI,CAAA;AAC1C,MAAM,aAAgB,GAAA,CAAA,CAAA;AACtB,MAAM,gBAAA,GAAmB,MAAO,CAAA,gBAAA,CAAiB,QAAS,EAAA;AAC1D,MAAM,qBAAqB,gBAAiB,CAAA,MAAA;AAE/B,MAAA,qBAAA,GAAwB,CAAC,KACpC,KAAA,KAAA,CAAM,SAAS,kBACd,IAAA,KAAA,CAAM,MAAW,KAAA,kBAAA,IAAsB,KAAQ,GAAA;AASlD,MAAM,KAAgB,GAAA;AAAA,EACpB,KAAO,EAAA,SAAA;AAAA,EACP,YAAY,SAAY,GAAA,SAAA;AAAA,EACxB,YAAA,EAAc,YAAY,SAAY,GAAA,SAAA;AAAA,EACtC,YAAc,EAAA;AAAA,IACZ,IAAA;AAAA,IACA,eAAkB,GAAA,SAAA;AAAA,IAClB,kBAAkB,SAAY,GAAA,SAAA;AAAA,IAC9B,eAAA,GAAkB,YAAY,SAAY,GAAA,SAAA;AAAA,IAC1C,eAAA,GAAkB,SAAY,GAAA,SAAA,GAAY,SAAY,GAAA;AAAA;AAE1D,CAAA;AAEA,MAAM,IAAe,GAAA;AAAA,EACnB,KAAO,EAAA,GAAA;AAAA,EACP,UAAY,EAAA,IAAA;AAAA,EACZ,YAAc,EAAA,KAAA;AAAA,EACd,cAAc,CAAC,IAAA,EAAM,GAAK,EAAA,IAAA,EAAM,OAAO,MAAM;AAC/C,CAAA;AAEA,SAAS,OAAA,CAAQ,KAAe,EAAA,SAAA,GAAY,CAAG,EAAA;AAC7C,EAAA,OAAA,CAAQ,YAAe,GAAA,KAAA,EAAO,KAAM,CAAA,CAAC,SAAS,CAAA;AAChD;AAEA,MAAM,YAAA,GACJ,YACA,SACA,GAAA,SAAA,GACA,YACA,SACA,GAAA,SAAA,GACA,YACA,SACA,GAAA,SAAA;AAEF,MAAM,KAAQ,GAAA;AAAA,EACZ,KAAO,EAAA,OAAA;AAAA,EACP,MAAQ,EAAA,QAAA;AAAA,EACR,IAAM,EAAA;AACR,CAAA;AAEA,SAAS,GAAA,CAAI,CAAW,EAAA,EAAA,EAAY,GAAqB,EAAA;AACvD,EAAA,IAAI,MAAM,CAAE,CAAA,MAAA;AACZ,EAAA,MAAM,OAAO,EAAK,GAAA,GAAA;AAElB,EAAA,IAAI,OAAO,CAAG,EAAA;AACZ,IAAA,IAAI,SAAS,CAAG,EAAA;AACd,MAAA,CAAA,GAAI,IAAI,GAAI,CAAA,KAAA;AAAA,KACd,MAAA,IAAW,SAAS,CAAG,EAAA;AACrB,MAAA,CAAA,GAAI,IAAI,GAAI,CAAA,UAAA;AAAA,KACd,MAAA,IAAW,SAAS,CAAG,EAAA;AACrB,MAAA,CAAA,GAAI,IAAI,GAAI,CAAA,YAAA;AAAA;AACd,GACK,MAAA;AACL,IAAA,IAAI,OAAO,CAAG,EAAA;AACZ,MAAI,CAAA,GAAA,CAAA,CAAE,KAAM,CAAA,CAAA,EAAG,EAAE,CAAA;AACjB,MAAM,GAAA,GAAA,EAAA;AAAA;AAGR,IAAA,IAAI,QAAQ,KAAS,IAAA,CAAA,CAAE,OAAO,GAAM,GAAA,CAAC,MAAM,GAAK,EAAA;AAC9C,MAAI,CAAA,GAAA,CAAA,CAAE,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAA;AACvB,MAAO,OAAA,GAAA,CAAI,CAAG,EAAA,EAAA,EAAI,GAAG,CAAA;AAAA;AACvB;AAEF,EAAO,OAAA,CAAA;AACT;AAEO,SAAS,YACd,CAAA,KAAA,EACA,KAAQ,GAAA,KAAA,CAAM,KACd,EAAA,QAAA,GAAW,CACX,EAAA,OAAA,EACA,eACA,EAAA,eAAA,GAAkB,IAClB,EAAA,YAAA,GAA6B,OAC7B,EAAA;AACA,EAAA,IAAI,UAAU,KAAa,CAAA,IAAA,OAAO,UAAU,QAAY,IAAA,KAAA,CAAM,KAAK,CAAG,EAAA;AACpE,IAAO,OAAA,EAAA;AAAA;AAET,EAAI,IAAA,QAAA;AACJ,EAAI,IAAA,QAAA;AACJ,EAAI,IAAA,GAAA;AAEJ,EAAM,MAAA,CAAC,OAAO,KAAQ,GAAA,EAAE,IAAI,KAAM,CAAA,QAAA,EAAW,CAAA,KAAA,CAAM,GAAG,CAAA;AACtD,EAAA,MAAM,iBAAiB,KAAM,CAAA,MAAA;AAE7B,EAAA,QAAA,GACE,KAAU,KAAA,IAAA,GACN,IACA,GAAA,eAAA,GACE,UAAW,CAAA,KAAK,CAAE,CAAA,cAAA,EAClB,GAAA,UAAA,CAAW,KAAK,CAAA,CAAE,QAAS,EAAA;AAEnC,EAAI,IAAA,KAAA,KAAU,KAAM,CAAA,IAAA,IAAQ,eAAiB,EAAA;AAC3C,IAAA,QAAA,GAAW,QAAQ,QAAQ,CAAA;AAAA;AAG7B,EAAI,IAAA,QAAA,KAAa,aAAiB,IAAA,cAAA,KAAmB,QAAU,EAAA;AAC7D,IAAW,QAAA,GAAA,KAAA;AAAA,GACb,MAAA,IAAW,iBAAiB,QAAU,EAAA;AACpC,IAAA,IAAI,iBAAiB,OAAS,EAAA;AAC5B,MAAW,QAAA,GAAA,UAAA,CAAW,OAAO,KAAK,CAAA,CAC/B,QAAQ,QAAQ,CAAA,CAChB,MAAM,CAAC,CAAA;AAAA,KACL,MAAA;AACL,MAAW,QAAA,GAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,QAAQ,CAAA;AAAA;AACpC,GACK,MAAA;AAEL,IACG,IAAA,GAAA,GAAM,UACH,IACA,GAAA,eAAA,IAAmB,UAAU,KAAM,CAAA,IAAA,GACjC,QACA,IACN,EAAA;AACA,MAAA,IAAI,mBAAmB,CAAG,EAAA;AACxB,QAAW,QAAA,GAAA,GAAA,CAAI,YAAa,CAAA,QAAQ,CAAK,IAAA,EAAA;AAAA,OACpC,MAAA;AACL,QAAW,QAAA,GAAA,GAAA,CAAI,KAAO,EAAA,QAAA,EAAU,GAAG,CAAA;AAAA;AACrC,KACK,MAAA;AACL,MAAW,QAAA,GAAA,KAAA;AAAA;AACb;AAGF,EAAO,OAAA,QAAA,IAAY,QAAW,GAAA,GAAA,GAAM,QAAW,GAAA,EAAA,CAAA;AACjD;AAEO,SAAS,kBACd,CAAA,KAAA,EACA,KAAQ,GAAA,KAAA,CAAM,KACd,EAAA,QAAA,GAAW,CACX,EAAA,OAAA,EACA,eACA,EAAA,eAAA,GAAkB,IAClB,EAAA,YAAA,GAA6B,OAC7B,EAAA;AACA,EAAI,IAAA,QAAA;AACJ,EAAI,IAAA,QAAA;AACJ,EAAI,IAAA,GAAA;AAEJ,EAAA,MAAM,CAAC,KAAO,EAAA,KAAA,GAAQ,EAAE,CAAI,GAAA,KAAA,CAAM,MAAM,GAAG,CAAA;AAC3C,EAAA,MAAM,iBAAiB,KAAM,CAAA,MAAA;AAE7B,EAAA,QAAA,GACE,UAAU,EACN,GAAA,GAAA,GACA,UAAU,IACR,GAAA,IAAA,GACA,kBACE,qBAAsB,CAAA,KAAK,IACzB,MAAO,CAAA,KAAK,EAAE,cAAe,EAAA,GAC7B,WAAW,KAAK,CAAA,CAAE,gBACpB,GAAA,KAAA;AAEV,EAAI,IAAA,KAAA,KAAU,KAAM,CAAA,IAAA,IAAQ,eAAiB,EAAA;AAC3C,IAAA,QAAA,GAAW,QAAQ,QAAQ,CAAA;AAAA;AAG7B,EAAI,IAAA,QAAA,KAAa,aAAiB,IAAA,cAAA,KAAmB,QAAU,EAAA;AAC7D,IAAW,QAAA,GAAA,KAAA;AAAA,GACb,MAAA,IAAW,iBAAiB,QAAU,EAAA;AACpC,IAAA,IAAI,iBAAiB,OAAS,EAAA;AAC5B,MAAW,QAAA,GAAA,UAAA,CAAW,OAAO,KAAK,CAAA,CAC/B,QAAQ,QAAQ,CAAA,CAChB,MAAM,CAAC,CAAA;AAAA,KACL,MAAA;AACL,MAAW,QAAA,GAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,QAAQ,CAAA;AAAA;AACpC,GACK,MAAA;AAEL,IACG,IAAA,GAAA,GAAM,UACH,IACA,GAAA,eAAA,IAAmB,UAAU,KAAM,CAAA,IAAA,GACjC,QACA,IACN,EAAA;AACA,MAAA,IAAI,mBAAmB,CAAG,EAAA;AACxB,QAAW,QAAA,GAAA,GAAA,CAAI,YAAa,CAAA,QAAQ,CAAK,IAAA,EAAA;AAAA,OACpC,MAAA;AACL,QAAW,QAAA,GAAA,GAAA,CAAI,KAAO,EAAA,QAAA,EAAU,GAAG,CAAA;AAAA;AACrC,KACK,MAAA;AACL,MAAW,QAAA,GAAA,KAAA;AAAA;AACb;AAGF,EAAO,OAAA,QAAA,IAAY,QAAW,GAAA,GAAA,GAAM,QAAW,GAAA,EAAA,CAAA;AACjD;;;;"}
|
|
@@ -2,14 +2,14 @@ import { metadataKeys } from './column-utils.js';
|
|
|
2
2
|
|
|
3
3
|
const { IS_LEAF, KEY, IDX, SELECTED } = metadataKeys;
|
|
4
4
|
const actualRowPositioning = (rowHeight) => [
|
|
5
|
-
(
|
|
5
|
+
(dataRow) => dataRow.index * rowHeight,
|
|
6
6
|
(position) => Math.floor(position / rowHeight),
|
|
7
7
|
false
|
|
8
8
|
];
|
|
9
9
|
const virtualRowPositioning = (rowHeight, virtualisedExtent, pctScrollTop) => [
|
|
10
|
-
(
|
|
10
|
+
(dataRow, offset = 0) => {
|
|
11
11
|
const rowOffset = pctScrollTop.current * virtualisedExtent;
|
|
12
|
-
return (
|
|
12
|
+
return (dataRow.index - offset) * rowHeight - rowOffset;
|
|
13
13
|
},
|
|
14
14
|
/*
|
|
15
15
|
Return index position of closest row
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"row-utils.js","sources":["../../../../../../packages/vuu-utils/src/row-utils.ts"],"sourcesContent":["//TODO this all probably belongs in vuu-table\nimport type {\n DataSourceRow,\n DataSourceRowObject,\n} from \"@vuu-ui/vuu-data-types\";\nimport { ColumnMap, metadataKeys } from \"./column-utils\";\nimport { IKeySet } from \"./keyset\";\nimport { VuuRow } from \"@vuu-ui/vuu-protocol-types\";\nimport { RefObject } from \"react\";\n\nconst { IS_LEAF, KEY, IDX, SELECTED } = metadataKeys;\n\nexport type RowOffsetFunc = (
|
|
1
|
+
{"version":3,"file":"row-utils.js","sources":["../../../../../../packages/vuu-utils/src/row-utils.ts"],"sourcesContent":["//TODO this all probably belongs in vuu-table\nimport type {\n DataSourceRow,\n DataSourceRowObject,\n} from \"@vuu-ui/vuu-data-types\";\nimport { ColumnMap, metadataKeys } from \"./column-utils\";\nimport { IKeySet } from \"./keyset\";\nimport { VuuRow } from \"@vuu-ui/vuu-protocol-types\";\nimport { RefObject } from \"react\";\nimport { DataRow } from \"@vuu-ui/vuu-table-types\";\n\nconst { IS_LEAF, KEY, IDX, SELECTED } = metadataKeys;\n\nexport type RowOffsetFunc = (dataRow: DataRow, pctScrollTop?: number) => number;\nexport type RowAtPositionFunc = (position: number) => number;\n\n/**\n * RowOffset function, RowAtPosition function, isVirtualScroll\n */\nexport type RowPositioning = [RowOffsetFunc, RowAtPositionFunc, boolean];\n\nexport const actualRowPositioning = (rowHeight: number): RowPositioning => [\n (dataRow) => dataRow.index * rowHeight,\n (position) => Math.floor(position / rowHeight),\n false,\n];\n\n/**\n * return functions for determining a) the pixel offset to apply to a row, given the\n * row index and b) the index of the row at a given scroll offset. This implementation\n * is used when we are forced to 'virtualise' scrolling - because the number of rows\n * is high enough that we cannot create a large enough HTML content container.\n *\n * @param rowHeight\n * @param virtualisedExtent\n * @param pctScrollTop\n * @returns\n */\nexport const virtualRowPositioning = (\n rowHeight: number,\n virtualisedExtent: number,\n pctScrollTop: RefObject<number>,\n): RowPositioning => [\n (dataRow, offset = 0) => {\n const rowOffset = pctScrollTop.current * virtualisedExtent;\n return (dataRow.index - offset) * rowHeight - rowOffset;\n },\n /*\n Return index position of closest row \n */\n (position) => {\n const rowOffset = pctScrollTop.current * virtualisedExtent;\n return Math.round((position + rowOffset) / rowHeight);\n },\n true,\n];\n\n// deprecated\nexport type RowToObjectMapper = (\n row: DataSourceRow,\n columnMap: ColumnMap,\n) => DataSourceRowObject;\n\n// deprecated\nexport const asDataSourceRowObject: RowToObjectMapper = (\n row,\n columnMap,\n): DataSourceRowObject => {\n const { [IS_LEAF]: isLeaf, [KEY]: key, [IDX]: index } = row;\n\n const rowObject: DataSourceRowObject = {\n key,\n index,\n isGroupRow: !isLeaf,\n isSelected: row[SELECTED] !== 0,\n data: {},\n };\n\n for (const [colName, colIdx] of Object.entries(columnMap)) {\n rowObject.data[colName] = row[colIdx];\n }\n\n return rowObject;\n};\n\n// deprecated\nexport const vuuRowToDataSourceRow = (\n { rowIndex, rowKey, sel: isSelected = 0, ts, data }: VuuRow,\n keys: IKeySet,\n) => {\n return [\n rowIndex,\n keys.keyFor(rowIndex),\n true,\n false,\n 0,\n 0,\n rowKey,\n isSelected,\n ts,\n false, // IsNew\n ].concat(data) as DataSourceRow;\n};\n"],"names":[],"mappings":";;AAWA,MAAM,EAAE,OAAA,EAAS,GAAK,EAAA,GAAA,EAAK,UAAa,GAAA,YAAA;AAU3B,MAAA,oBAAA,GAAuB,CAAC,SAAsC,KAAA;AAAA,EACzE,CAAC,OAAY,KAAA,OAAA,CAAQ,KAAQ,GAAA,SAAA;AAAA,EAC7B,CAAC,QAAA,KAAa,IAAK,CAAA,KAAA,CAAM,WAAW,SAAS,CAAA;AAAA,EAC7C;AACF;AAaO,MAAM,qBAAwB,GAAA,CACnC,SACA,EAAA,iBAAA,EACA,YACmB,KAAA;AAAA,EACnB,CAAC,OAAS,EAAA,MAAA,GAAS,CAAM,KAAA;AACvB,IAAM,MAAA,SAAA,GAAY,aAAa,OAAU,GAAA,iBAAA;AACzC,IAAQ,OAAA,CAAA,OAAA,CAAQ,KAAQ,GAAA,MAAA,IAAU,SAAY,GAAA,SAAA;AAAA,GAChD;AAAA;AAAA;AAAA;AAAA,EAIA,CAAC,QAAa,KAAA;AACZ,IAAM,MAAA,SAAA,GAAY,aAAa,OAAU,GAAA,iBAAA;AACzC,IAAA,OAAO,IAAK,CAAA,KAAA,CAAA,CAAO,QAAW,GAAA,SAAA,IAAa,SAAS,CAAA;AAAA,GACtD;AAAA,EACA;AACF;AASa,MAAA,qBAAA,GAA2C,CACtD,GAAA,EACA,SACwB,KAAA;AACxB,EAAA,MAAM,EAAE,CAAC,OAAO,GAAG,MAAQ,EAAA,CAAC,GAAG,GAAG,GAAK,EAAA,CAAC,GAAG,GAAG,OAAU,GAAA,GAAA;AAExD,EAAA,MAAM,SAAiC,GAAA;AAAA,IACrC,GAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAY,CAAC,MAAA;AAAA,IACb,UAAA,EAAY,GAAI,CAAA,QAAQ,CAAM,KAAA,CAAA;AAAA,IAC9B,MAAM;AAAC,GACT;AAEA,EAAA,KAAA,MAAW,CAAC,OAAS,EAAA,MAAM,KAAK,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACzD,IAAA,SAAA,CAAU,IAAK,CAAA,OAAO,CAAI,GAAA,GAAA,CAAI,MAAM,CAAA;AAAA;AAGtC,EAAO,OAAA,SAAA;AACT;AAGa,MAAA,qBAAA,GAAwB,CACnC,EAAE,QAAU,EAAA,MAAA,EAAQ,GAAK,EAAA,UAAA,GAAa,CAAG,EAAA,EAAA,EAAI,IAAK,EAAA,EAClD,IACG,KAAA;AACH,EAAO,OAAA;AAAA,IACL,QAAA;AAAA,IACA,IAAA,CAAK,OAAO,QAAQ,CAAA;AAAA,IACpB,IAAA;AAAA,IACA,KAAA;AAAA,IACA,CAAA;AAAA,IACA,CAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA;AAAA,GACF,CAAE,OAAO,IAAI,CAAA;AACf;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-utils.js","sources":["../../../../../../packages/vuu-utils/src/tree-utils.ts"],"sourcesContent":["import { TreeSourceNode } from \"./tree-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { metadataKeys } from \"./column-utils\";\nimport { IconProvider } from \"@vuu-ui/vuu-data-local/src/tree-data-source/IconProvider\";\n\nconst { COUNT, DEPTH, IDX, KEY } = metadataKeys;\n\ntype Index = { value: number };\n\nconst timestamp = 0;\nconst isNew = false;\n\nexport const treeToDataSourceRows = (\n treeSourceNodes: TreeSourceNode[],\n iconProvider?: IconProvider,\n): [ColumnDescriptor[], DataSourceRow[]] => {\n const columns: ColumnDescriptor[] = [];\n\n columns.push(\n {\n hidden: true,\n name: \"nodeData\",\n type: \"json\",\n },\n {\n getIcon: iconProvider?.getIcon,\n name: \"Level 1\",\n type: \"string\",\n },\n {\n getIcon: iconProvider?.getIcon,\n name: \"Level 2\",\n type: \"string\",\n },\n );\n\n const rows: DataSourceRow[] = [];\n\n addChildValues(rows, treeSourceNodes, columns, iconProvider);\n return [columns, rows];\n};\n\nconst addChildValues = (\n rows: DataSourceRow[],\n treeSourceNodes: TreeSourceNode[],\n cols: ColumnDescriptor[],\n iconProvider: IconProvider | undefined,\n index: Index = { value: 0 },\n keyBase = \"$root\",\n depth = 1,\n): [number, number] => {\n let leafCount = 0;\n let rowCount = 0;\n if (depth === cols.length - 1) {\n cols.push({\n getIcon: iconProvider?.getIcon,\n name: `Level ${cols.length}`,\n type: \"string\",\n });\n }\n for (let i = 0; i < treeSourceNodes.length; i++, index.value += 1) {\n const { childNodes, icon, label, nodeData /*, tags */ } =\n treeSourceNodes[i];\n const blanks = Array(depth - 1).fill(\"\");\n const fullKey = `${keyBase}|${label}`;\n // prettier-ignore\n const row = [index.value, index.value, false,false,depth,0,fullKey,0, timestamp, isNew, nodeData, ...blanks, label ] as DataSourceRow;\n if (icon) {\n iconProvider?.setIcon(fullKey, icon);\n }\n rows.push(row);\n rowCount += 1;\n\n if (childNodes && childNodes.length > 0) {\n const [nestedLeafCount, nestedRowCount] = addChildValues(\n rows,\n childNodes,\n cols,\n iconProvider,\n { value: index.value + 1 },\n fullKey,\n depth + 1,\n );\n row[COUNT] = nestedLeafCount;\n leafCount += nestedLeafCount;\n rowCount += nestedRowCount;\n index.value += nestedRowCount;\n } else {\n leafCount += 1;\n }\n }\n\n return [leafCount, rowCount];\n};\n\nexport const lastPathSegment = (path: string, separator = \"/\") => {\n const root = path.endsWith(separator) ? path.slice(0, -1) : path;\n return root.slice(root.lastIndexOf(separator) + 1);\n};\n\nexport const dropLastPathSegment = (path: string, separator = \"/\") => {\n return path.slice(0, path.lastIndexOf(separator));\n};\n\nexport const getParentRow = (rows: DataSourceRow[], row: DataSourceRow) => {\n const { [IDX]: idx, [DEPTH]: depth } = row;\n for (let i = idx - 1; i >= 0; i--) {\n const nextRow = rows[i];\n if (nextRow[DEPTH] === depth - 1) {\n return nextRow;\n }\n }\n};\n\nconst rowsAreSiblings = (key1: string, key2: string) =>\n dropLastPathSegment(key1, \"|\") === dropLastPathSegment(key2, \"|\");\n\nexport const missingAncestor = (\n row: DataSourceRow,\n previousRow?: DataSourceRow,\n) => {\n if (previousRow) {\n const prevKey = previousRow[KEY];\n const key = row[KEY];\n\n if (key.startsWith(prevKey)) {\n return false;\n } else if (!rowsAreSiblings(prevKey, key)) {\n return true;\n }\n } else if (row[DEPTH] > 1) {\n return true;\n }\n\n return false;\n};\n"],"names":[],"mappings":";;AAMA,MAAM,EAAE,KAAA,EAAO,KAAO,EAAA,GAAA,EAAK,KAAQ,GAAA,YAAA;AAInC,MAAM,SAAY,GAAA,CAAA;AAClB,MAAM,KAAQ,GAAA,KAAA;AAED,MAAA,oBAAA,GAAuB,CAClC,eAAA,EACA,YAC0C,KAAA;AAC1C,EAAA,MAAM,UAA8B,EAAC;AAErC,EAAQ,OAAA,CAAA,IAAA;AAAA,IACN;AAAA,MACE,MAAQ,EAAA,IAAA;AAAA,MACR,IAAM,EAAA,UAAA;AAAA,MACN,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,SAAS,YAAc,EAAA,OAAA;AAAA,MACvB,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,SAAS,YAAc,EAAA,OAAA;AAAA,MACvB,IAAM,EAAA,SAAA;AAAA,MACN,IAAM,EAAA;AAAA;AACR,GACF;AAEA,EAAA,MAAM,OAAwB,EAAC;AAE/B,EAAe,cAAA,CAAA,IAAA,EAAM,eAAiB,EAAA,OAAA,EAAS,YAAY,CAAA;AAC3D,EAAO,OAAA,CAAC,SAAS,IAAI,CAAA;AACvB;AAEA,MAAM,cAAiB,GAAA,CACrB,IACA,EAAA,eAAA,EACA,MACA,YACA,EAAA,KAAA,GAAe,EAAE,KAAA,EAAO,CAAE,EAAA,EAC1B,OAAU,GAAA,OAAA,EACV,QAAQ,CACa,KAAA;AACrB,EAAA,IAAI,SAAY,GAAA,CAAA;AAChB,EAAA,IAAI,QAAW,GAAA,CAAA;AACf,EAAI,IAAA,KAAA,KAAU,IAAK,CAAA,MAAA,GAAS,CAAG,EAAA;AAC7B,IAAA,IAAA,CAAK,IAAK,CAAA;AAAA,MACR,SAAS,YAAc,EAAA,OAAA;AAAA,MACvB,IAAA,EAAM,CAAS,MAAA,EAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,MAC1B,IAAM,EAAA;AAAA,KACP,CAAA;AAAA;AAEH,EAAS,KAAA,IAAA,CAAA,GAAI,GAAG,CAAI,GAAA,eAAA,CAAgB,QAAQ,CAAK,EAAA,EAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AACjE,IAAM,MAAA;AAAA,MAAE,UAAA;AAAA,MAAY,IAAA;AAAA,MAAM,KAAA;AAAA,MAAO;AAAA;AAAA,KAAqB,GACpD,gBAAgB,CAAC,CAAA;AACnB,IAAA,MAAM,SAAS,KAAM,CAAA,KAAA,GAAQ,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AACvC,IAAA,MAAM,OAAU,GAAA,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"tree-utils.js","sources":["../../../../../../packages/vuu-utils/src/tree-utils.ts"],"sourcesContent":["import { TreeSourceNode } from \"./tree-types\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { metadataKeys } from \"./column-utils\";\nimport { IconProvider } from \"@vuu-ui/vuu-data-local/src/tree-data-source/IconProvider\";\n\nconst { COUNT, DEPTH, IDX, KEY } = metadataKeys;\n\ntype Index = { value: number };\n\nconst timestamp = 0;\nconst isNew = false;\n\nexport const treeToDataSourceRows = (\n treeSourceNodes: TreeSourceNode[],\n iconProvider?: IconProvider,\n): [ColumnDescriptor[], DataSourceRow[]] => {\n const columns: ColumnDescriptor[] = [];\n\n columns.push(\n {\n hidden: true,\n name: \"nodeData\",\n type: \"json\",\n },\n {\n getIcon: iconProvider?.getIcon,\n name: \"Level 1\",\n type: \"string\",\n },\n {\n getIcon: iconProvider?.getIcon,\n name: \"Level 2\",\n type: \"string\",\n },\n );\n\n const rows: DataSourceRow[] = [];\n\n addChildValues(rows, treeSourceNodes, columns, iconProvider);\n return [columns, rows];\n};\n\nconst addChildValues = (\n rows: DataSourceRow[],\n treeSourceNodes: TreeSourceNode[],\n cols: ColumnDescriptor[],\n iconProvider: IconProvider | undefined,\n index: Index = { value: 0 },\n keyBase = \"$root\",\n depth = 1,\n): [number, number] => {\n let leafCount = 0;\n let rowCount = 0;\n if (depth === cols.length - 1) {\n cols.push({\n getIcon: iconProvider?.getIcon,\n name: `Level ${cols.length}`,\n type: \"string\",\n });\n }\n for (let i = 0; i < treeSourceNodes.length; i++, index.value += 1) {\n const { childNodes, icon, label, nodeData /*, tags */ } =\n treeSourceNodes[i];\n const blanks = Array(depth - 1).fill(\"\");\n const fullKey = `${keyBase}|${label}`;\n\n // we create all nodes as non-leaf in a TreeTable, even those with no childNodes\n // prettier-ignore\n const row = [index.value, index.value, false, false, depth, 0, fullKey, 0, timestamp, isNew, nodeData, ...blanks, label ] as DataSourceRow;\n if (icon) {\n iconProvider?.setIcon(fullKey, icon);\n }\n rows.push(row);\n rowCount += 1;\n\n if (childNodes && childNodes.length > 0) {\n const [nestedLeafCount, nestedRowCount] = addChildValues(\n rows,\n childNodes,\n cols,\n iconProvider,\n { value: index.value + 1 },\n fullKey,\n depth + 1,\n );\n row[COUNT] = nestedLeafCount;\n leafCount += nestedLeafCount;\n rowCount += nestedRowCount;\n index.value += nestedRowCount;\n } else {\n leafCount += 1;\n }\n }\n\n return [leafCount, rowCount];\n};\n\nexport const lastPathSegment = (path: string, separator = \"/\") => {\n const root = path.endsWith(separator) ? path.slice(0, -1) : path;\n return root.slice(root.lastIndexOf(separator) + 1);\n};\n\nexport const dropLastPathSegment = (path: string, separator = \"/\") => {\n return path.slice(0, path.lastIndexOf(separator));\n};\n\nexport const getParentRow = (rows: DataSourceRow[], row: DataSourceRow) => {\n const { [IDX]: idx, [DEPTH]: depth } = row;\n for (let i = idx - 1; i >= 0; i--) {\n const nextRow = rows[i];\n if (nextRow[DEPTH] === depth - 1) {\n return nextRow;\n }\n }\n};\n\nconst rowsAreSiblings = (key1: string, key2: string) =>\n dropLastPathSegment(key1, \"|\") === dropLastPathSegment(key2, \"|\");\n\nexport const missingAncestor = (\n row: DataSourceRow,\n previousRow?: DataSourceRow,\n) => {\n if (previousRow) {\n const prevKey = previousRow[KEY];\n const key = row[KEY];\n\n if (key.startsWith(prevKey)) {\n return false;\n } else if (!rowsAreSiblings(prevKey, key)) {\n return true;\n }\n } else if (row[DEPTH] > 1) {\n return true;\n }\n\n return false;\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.13.
|
|
2
|
+
"version": "0.13.115-alpha.2",
|
|
3
3
|
"author": "heswell",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"types": "types/index.d.ts",
|
|
6
6
|
"devDependencies": {
|
|
7
|
-
"@vuu-ui/vuu-data-types": "0.13.
|
|
8
|
-
"@vuu-ui/vuu-table-types": "0.13.
|
|
9
|
-
"@vuu-ui/vuu-filter-types": "0.13.
|
|
10
|
-
"@vuu-ui/vuu-protocol-types": "0.13.
|
|
7
|
+
"@vuu-ui/vuu-data-types": "0.13.115-alpha.2",
|
|
8
|
+
"@vuu-ui/vuu-table-types": "0.13.115-alpha.2",
|
|
9
|
+
"@vuu-ui/vuu-filter-types": "0.13.115-alpha.2",
|
|
10
|
+
"@vuu-ui/vuu-protocol-types": "0.13.115-alpha.2"
|
|
11
11
|
},
|
|
12
12
|
"peerDependencies": {
|
|
13
13
|
"@internationalized/date": "^3.0.0",
|
|
14
|
-
"@vuu-ui/vuu-filter-parser": "0.13.
|
|
14
|
+
"@vuu-ui/vuu-filter-parser": "0.13.115-alpha.2",
|
|
15
15
|
"clsx": "^2.0.0",
|
|
16
16
|
"react": "^19.2.3",
|
|
17
17
|
"react-dom": "^19.2.3"
|
package/types/column-utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { DataSourceRow, DataValueType, DataValueTypeSimple, DateTimeDataValueDescriptor, SchemaColumn, TableSchema, TimeDataValueDescriptor } from "@vuu-ui/vuu-data-types";
|
|
2
|
-
import type { VuuAggType, VuuAggregation, VuuColumnDataType,
|
|
3
|
-
import type { ColumnAlignment, ColumnDescriptor, ColumnLayout, DataValueTypeDescriptor, ColumnTypeFormatting, ColumnTypeRendering, ColumnTypeWithValidationRules, DefaultColumnConfiguration, GroupColumnDescriptor, LookupRenderer, MappedValueTypeRenderer, PinLocation, RuntimeColumnDescriptor, TableCellRendererProps, TableConfig, TableHeadings, ValueListRenderer } from "@vuu-ui/vuu-table-types";
|
|
2
|
+
import type { VuuAggType, VuuAggregation, VuuColumnDataType, VuuDataRowDto, VuuGroupBy, VuuSort } from "@vuu-ui/vuu-protocol-types";
|
|
3
|
+
import type { ColumnAlignment, ColumnDescriptor, ColumnLayout, DataValueTypeDescriptor, ColumnTypeFormatting, ColumnTypeRendering, ColumnTypeWithValidationRules, DefaultColumnConfiguration, GroupColumnDescriptor, LookupRenderer, MappedValueTypeRenderer, PinLocation, RuntimeColumnDescriptor, TableCellRendererProps, TableConfig, TableHeadings, ValueListRenderer, DataRow } from "@vuu-ui/vuu-table-types";
|
|
4
4
|
import { type CSSProperties } from "react";
|
|
5
5
|
import { TableModel } from "@vuu-ui/vuu-table";
|
|
6
6
|
/**
|
|
@@ -50,7 +50,7 @@ export declare const isLookupRenderer: (renderer?: unknown) => renderer is Looku
|
|
|
50
50
|
export declare const isValueListRenderer: (renderer?: unknown) => renderer is ValueListRenderer;
|
|
51
51
|
export declare const hasValidationRules: (type?: DataValueType) => type is ColumnTypeWithValidationRules;
|
|
52
52
|
export declare const isMappedValueTypeRenderer: (renderer?: unknown) => renderer is MappedValueTypeRenderer;
|
|
53
|
-
export declare function buildColumnMap(columns?: (ColumnDescriptor | SchemaColumn | string)[]): ColumnMap;
|
|
53
|
+
export declare function buildColumnMap(columns?: readonly (ColumnDescriptor | SchemaColumn | string)[]): ColumnMap;
|
|
54
54
|
export declare function projectUpdates(updates: number[]): number[];
|
|
55
55
|
export declare const metadataKeys: {
|
|
56
56
|
readonly IDX: 0;
|
|
@@ -82,7 +82,7 @@ export declare const isGroupColumn: (column: RuntimeColumnDescriptor) => column
|
|
|
82
82
|
*/
|
|
83
83
|
export declare const checkConfirmationPending: (previousConfig?: TableModel) => boolean | undefined;
|
|
84
84
|
export declare const isJsonAttribute: (value: unknown) => boolean;
|
|
85
|
-
export declare const isJsonGroup: (column: RuntimeColumnDescriptor,
|
|
85
|
+
export declare const isJsonGroup: (column: RuntimeColumnDescriptor, dataRow: DataRow) => boolean;
|
|
86
86
|
export declare const isJsonColumn: (column: RuntimeColumnDescriptor) => boolean;
|
|
87
87
|
export declare const sortPinnedColumns: (columns: RuntimeColumnDescriptor[], selectionBookendWidth?: number) => RuntimeColumnDescriptor[];
|
|
88
88
|
export declare const measurePinnedColumns: (columns: RuntimeColumnDescriptor[], selectionEndSize: number) => {
|
|
@@ -122,16 +122,16 @@ export declare const existingSort: (columns: RuntimeColumnDescriptor[]) => boole
|
|
|
122
122
|
export declare const getColumnName: (name: string) => string;
|
|
123
123
|
export declare const getColumnLabel: (column: ColumnDescriptor) => string;
|
|
124
124
|
export declare const findColumn: (columns: RuntimeColumnDescriptor[], columnName: string) => RuntimeColumnDescriptor | undefined;
|
|
125
|
-
export declare function updateColumn<T extends ColumnDescriptor>(columns: T[], column: T): T[];
|
|
126
|
-
export declare function updateColumn(columns: RuntimeColumnDescriptor[], column: string, options: Partial<ColumnDescriptor>): RuntimeColumnDescriptor[];
|
|
125
|
+
export declare function updateColumn<T extends ColumnDescriptor>(columns: readonly T[], column: T): T[];
|
|
126
|
+
export declare function updateColumn(columns: readonly RuntimeColumnDescriptor[], column: string, options: Partial<ColumnDescriptor>): RuntimeColumnDescriptor[];
|
|
127
127
|
export declare const toDataSourceColumns: (column: ColumnDescriptor) => string;
|
|
128
128
|
export declare const dataSourceRowToDataRowDto: (row: DataSourceRow, columnMap: ColumnMap) => VuuDataRowDto;
|
|
129
129
|
export declare const isDataLoading: (columns: RuntimeColumnDescriptor[]) => boolean;
|
|
130
130
|
export declare const getColumnsInViewport: (columns: RuntimeColumnDescriptor[], vpStart: number, vpEnd: number) => [RuntimeColumnDescriptor[], number];
|
|
131
131
|
export declare const isNotHidden: (column: RuntimeColumnDescriptor) => boolean;
|
|
132
132
|
export declare const visibleColumnAtIndex: (columns: RuntimeColumnDescriptor[], index: number) => RuntimeColumnDescriptor | undefined;
|
|
133
|
-
export declare const getGroupIcon: (columns: RuntimeColumnDescriptor[],
|
|
134
|
-
export declare const getGroupValue: (columns: RuntimeColumnDescriptor[],
|
|
133
|
+
export declare const getGroupIcon: (columns: RuntimeColumnDescriptor[], dataRow: DataRow) => string | undefined;
|
|
134
|
+
export declare const getGroupValue: (columns: RuntimeColumnDescriptor[], dataRow: DataRow) => string | null;
|
|
135
135
|
export declare const getDefaultColumnType: (serverDataType?: VuuColumnDataType) => DataValueTypeSimple;
|
|
136
136
|
export declare const updateColumnFormatting: <T extends ColumnDescriptor = ColumnDescriptor>(column: T, formatting: ColumnTypeFormatting) => T;
|
|
137
137
|
export declare function updateColumnType<T extends ColumnDescriptor = ColumnDescriptor>(column: T, type: DataValueTypeSimple): T;
|
|
@@ -141,7 +141,7 @@ export declare const getTypeFormattingFromColumn: (column: ColumnDescriptor) =>
|
|
|
141
141
|
* Check that columnDescriptors are included in provided list of subscribec column names (unless they
|
|
142
142
|
* atr 'client side' columns).
|
|
143
143
|
*/
|
|
144
|
-
export declare const assertAllColumnsAreIncludedInSubscription: (columns: ColumnDescriptor[], columnNames: string[]) => void;
|
|
144
|
+
export declare const assertAllColumnsAreIncludedInSubscription: (columns: readonly ColumnDescriptor[], columnNames: string[]) => void;
|
|
145
145
|
/**
|
|
146
146
|
* Return a filter predicate that will reject columns, names of which
|
|
147
147
|
* are not in provided list. Exception made for columns explicitly
|
|
@@ -156,15 +156,15 @@ export declare const subscribedOnly: (columnNames?: string[]) => (column: Column
|
|
|
156
156
|
* @param columnName
|
|
157
157
|
* @returns
|
|
158
158
|
*/
|
|
159
|
-
export declare const addColumnToSubscribedColumns: (subscribedColumns: ColumnDescriptor[], availableColumns: SchemaColumn[], columnName: string) => ColumnDescriptor[];
|
|
159
|
+
export declare const addColumnToSubscribedColumns: (subscribedColumns: readonly ColumnDescriptor[], availableColumns: readonly SchemaColumn[], columnName: string) => ColumnDescriptor[];
|
|
160
160
|
export declare const isCalculatedColumn: (columnName?: string) => boolean;
|
|
161
161
|
export declare const getCalculatedColumnDetails: (column: ColumnDescriptor) => Partial<CalculatedColumn>;
|
|
162
162
|
export declare const setCalculatedColumnName: (column: ColumnDescriptor, name: string) => ColumnDescriptor;
|
|
163
163
|
export declare const setCalculatedColumnType: (column: ColumnDescriptor, type: string) => ColumnDescriptor;
|
|
164
164
|
export declare const setCalculatedColumnExpression: (column: ColumnDescriptor, expression: string) => ColumnDescriptor;
|
|
165
165
|
export declare const moveColumnTo: (columns: ColumnDescriptor[], column: ColumnDescriptor, newIndex: number) => ColumnDescriptor[];
|
|
166
|
-
export declare function replaceColumn<C extends ColumnDescriptor = RuntimeColumnDescriptor>(columns: C[], column: C): C[];
|
|
167
|
-
export declare const applyDefaultColumnConfig: ({ columns, table }: TableSchema, getDefaultColumnConfig?: DefaultColumnConfiguration) => SchemaColumn[];
|
|
166
|
+
export declare function replaceColumn<C extends ColumnDescriptor = RuntimeColumnDescriptor>(columns: readonly C[], column: C): C[];
|
|
167
|
+
export declare const applyDefaultColumnConfig: ({ columns, table }: TableSchema, getDefaultColumnConfig?: DefaultColumnConfiguration) => readonly SchemaColumn[];
|
|
168
168
|
export type columnOptions = {
|
|
169
169
|
availableWidth?: number;
|
|
170
170
|
columnLayout?: ColumnLayout;
|
|
@@ -208,6 +208,6 @@ export declare const reorderColumnItems: <T extends {
|
|
|
208
208
|
name: string;
|
|
209
209
|
} = {
|
|
210
210
|
name: string;
|
|
211
|
-
}>(columnItems:
|
|
211
|
+
}>(columnItems: readonly T[], orderedNames: string[]) => T[];
|
|
212
212
|
export declare const columnByAriaIndex: (columns: RuntimeColumnDescriptor[], ariaColIndex: number) => RuntimeColumnDescriptor;
|
|
213
213
|
export {};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EditRuleValidator } from "@vuu-ui/vuu-data-types";
|
|
2
2
|
import { VuuColumnDataType } from "@vuu-ui/vuu-protocol-types";
|
|
3
|
-
import { ColumnDescriptor, ColumnDescriptorCustomRenderer, ColumnTypeRendering, HeaderCellProps, TableCellRendererProps } from "@vuu-ui/vuu-table-types";
|
|
3
|
+
import { ColumnDescriptor, ColumnDescriptorCustomRenderer, ColumnTypeRendering, DataRow, HeaderCellProps, TableCellRendererProps } from "@vuu-ui/vuu-table-types";
|
|
4
4
|
import { FunctionComponent as FC, HTMLAttributes } from "react";
|
|
5
|
-
import { ColumnMap } from "./column-utils";
|
|
6
5
|
export interface CellConfigPanelProps extends HTMLAttributes<HTMLDivElement> {
|
|
7
6
|
onConfigChange: () => void;
|
|
8
7
|
}
|
|
@@ -12,7 +11,7 @@ export interface ConfigurationEditorProps {
|
|
|
12
11
|
column: ColumnDescriptorCustomRenderer;
|
|
13
12
|
onChangeRendering: ColumnRenderPropsChangeHandler;
|
|
14
13
|
}
|
|
15
|
-
export type RowClassNameGenerator = (
|
|
14
|
+
export type RowClassNameGenerator = (dataRow: DataRow) => string | undefined;
|
|
16
15
|
export type RowClassGenerator = {
|
|
17
16
|
id: string;
|
|
18
17
|
fn: RowClassNameGenerator;
|
|
@@ -52,12 +51,13 @@ export declare function registerComponent(componentName: string, component: RowC
|
|
|
52
51
|
export declare function registerComponent(componentName: string, component: EditRuleValidator, componentType: "data-edit-validator", options?: CellRendererOptions): void;
|
|
53
52
|
export declare function registerComponent(componentName: string, component: FC<any>, componentType: Omit<ComponentType, "data-edit-validator" | "row-class-generator">, options?: CellRendererOptions): void;
|
|
54
53
|
export declare const registerConfigurationEditor: (componentName: string, configurationEditor: FC<ConfigurationEditorProps>) => void;
|
|
55
|
-
|
|
54
|
+
type CellRendererDataType = VuuColumnDataType | "json";
|
|
55
|
+
export declare const getRegisteredCellRenderers: (cellRendererDataType?: CellRendererDataType) => CellRendererDescriptor[];
|
|
56
56
|
export declare const getLayoutComponent: (componentName: string) => FC<any>;
|
|
57
57
|
export declare const getCellRendererOptions: (renderName: string) => CellRendererOptions | undefined;
|
|
58
58
|
export declare function getCellRenderer(column: ColumnDescriptor): FC<TableCellRendererProps> | undefined;
|
|
59
|
-
export declare function getColumnHeaderContentRenderer(column: ColumnDescriptor): FC<Omit<HeaderCellProps, "
|
|
60
|
-
export declare function getColumnHeaderLabelRenderer(column: ColumnDescriptor): FC<Omit<HeaderCellProps, "
|
|
59
|
+
export declare function getColumnHeaderContentRenderer(column: ColumnDescriptor): FC<Omit<HeaderCellProps, "index" | "id">> | undefined;
|
|
60
|
+
export declare function getColumnHeaderLabelRenderer(column: ColumnDescriptor): FC<Omit<HeaderCellProps, "index" | "id">> | undefined;
|
|
61
61
|
export declare const getRowClassNameGenerator: (generatorId: string) => RowClassGenerator | undefined;
|
|
62
62
|
export declare function getConfigurationEditor(configEditor?: string): FC<ConfigurationEditorProps> | undefined;
|
|
63
63
|
export declare function getCellConfigPanelRenderer(name: string): ConfigEditorComponent | undefined;
|
package/types/data-utils.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export declare const DOWN2 = "down2";
|
|
|
6
6
|
export declare const stringIsValidInt: (val: string) => boolean;
|
|
7
7
|
export declare const stringIsValidDecimal: (val: string) => boolean;
|
|
8
8
|
export declare const stringIsValidNumber: (val: string) => boolean;
|
|
9
|
-
export declare const numericTypeOfStringValue: (val: string) => "
|
|
9
|
+
export declare const numericTypeOfStringValue: (val: string) => "double" | "int" | "NaN";
|
|
10
10
|
export declare const isValidNumber: (n: unknown) => n is number;
|
|
11
11
|
export declare const shallowEquals: (o1?: {
|
|
12
12
|
[key: string]: unknown;
|
|
@@ -7,6 +7,7 @@ export declare const isValidFilterClauseOp: (op?: string) => op is FilterClauseO
|
|
|
7
7
|
export declare const isNamedFilter: (f?: Filter) => boolean;
|
|
8
8
|
export declare const isSingleValueFilter: (f?: Partial<Filter>) => f is SingleValueFilterClause;
|
|
9
9
|
export declare const isSerializableFilter: (f: object) => f is SerializableFilter;
|
|
10
|
+
export declare const isFilter: (f: unknown) => f is Filter;
|
|
10
11
|
export declare const isFilterClause: (f?: Partial<Filter>) => f is SingleValueFilterClause | MultiValueFilterClause;
|
|
11
12
|
export declare const isMultiValueFilter: (f?: Partial<Filter>) => f is MultiValueFilterClause;
|
|
12
13
|
export declare const isInFilter: (f: Partial<Filter>) => f is MultiValueFilterClause;
|
|
@@ -49,7 +50,7 @@ export declare const stripFilterFromColumns: (columns: RuntimeColumnDescriptor[]
|
|
|
49
50
|
allowColumnHeaderMenu?: false;
|
|
50
51
|
colHeaderContentRenderer?: string;
|
|
51
52
|
colHeaderLabelRenderer?: string;
|
|
52
|
-
getIcon?: (row: import("@vuu-ui/vuu-
|
|
53
|
+
getIcon?: (row: import("@vuu-ui/vuu-table-types").DataRow) => string | undefined;
|
|
53
54
|
groupable?: boolean;
|
|
54
55
|
hidden?: boolean;
|
|
55
56
|
maxWidth?: number;
|
|
@@ -3,7 +3,7 @@ export type ValueFormatters = {
|
|
|
3
3
|
[key: string]: ValueFormatter;
|
|
4
4
|
};
|
|
5
5
|
export declare const defaultValueFormatter: (value: unknown) => string;
|
|
6
|
-
export declare const numericFormatter: ({ align, type, }: Partial<ColumnDescriptor>) => (value: unknown) => string;
|
|
6
|
+
export declare const numericFormatter: ({ align, serverDataType, type, }: Partial<ColumnDescriptor>) => (value: unknown) => string;
|
|
7
7
|
export declare const getValueFormatter: (column: ColumnDescriptor, serverDataType?: import("@vuu-ui/vuu-protocol-types").VuuColumnDataType | undefined) => ValueFormatter;
|
|
8
8
|
/**
|
|
9
9
|
* Lowercases a string and returns as Lowercase typescript type
|
package/types/index.d.ts
CHANGED
|
@@ -10,7 +10,6 @@ export * from "./broadcast-channel";
|
|
|
10
10
|
export * from "./column-utils";
|
|
11
11
|
export * from "./cookie-utils";
|
|
12
12
|
export * from "./component-registry";
|
|
13
|
-
export * from "./DataWindow";
|
|
14
13
|
export { Clock } from "./Clock";
|
|
15
14
|
export * from "./common-types";
|
|
16
15
|
export * from "./css-utils";
|
package/types/round-decimal.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import { RoundingRule } from "@vuu-ui/vuu-table-types";
|
|
2
|
+
export declare const exceedsMaxSafeInteger: (value: string) => boolean;
|
|
2
3
|
export declare function roundDecimal(value?: number, align?: string, decimals?: number, zeroPad?: boolean, alignOnDecimals?: boolean, useLocaleString?: boolean, roundingRule?: RoundingRule): string;
|
|
4
|
+
export declare function roundScaledDecimal(value: string, align?: string, decimals?: number, zeroPad?: boolean, alignOnDecimals?: boolean, useLocaleString?: boolean, roundingRule?: RoundingRule): string;
|
package/types/row-utils.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ import { ColumnMap } from "./column-utils";
|
|
|
3
3
|
import { IKeySet } from "./keyset";
|
|
4
4
|
import { VuuRow } from "@vuu-ui/vuu-protocol-types";
|
|
5
5
|
import { RefObject } from "react";
|
|
6
|
-
|
|
6
|
+
import { DataRow } from "@vuu-ui/vuu-table-types";
|
|
7
|
+
export type RowOffsetFunc = (dataRow: DataRow, pctScrollTop?: number) => number;
|
|
7
8
|
export type RowAtPositionFunc = (position: number) => number;
|
|
8
9
|
/**
|
|
9
10
|
* RowOffset function, RowAtPosition function, isVirtualScroll
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var rangeUtils = require('./range-utils.js');
|
|
4
|
-
var columnUtils = require('./column-utils.js');
|
|
5
|
-
|
|
6
|
-
var __defProp = Object.defineProperty;
|
|
7
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
9
|
-
const { KEY } = columnUtils.metadataKeys;
|
|
10
|
-
class DataWindow {
|
|
11
|
-
constructor({ from, to }) {
|
|
12
|
-
__publicField(this, "range");
|
|
13
|
-
__publicField(this, "data");
|
|
14
|
-
__publicField(this, "rowCount", 0);
|
|
15
|
-
__publicField(this, "setRowCount", (rowCount) => {
|
|
16
|
-
if (rowCount < this.data.length) {
|
|
17
|
-
this.data.length = rowCount;
|
|
18
|
-
}
|
|
19
|
-
this.rowCount = rowCount;
|
|
20
|
-
});
|
|
21
|
-
this.range = new rangeUtils.WindowRange(from, to);
|
|
22
|
-
this.data = new Array(to - from);
|
|
23
|
-
}
|
|
24
|
-
// return true if existing row was updated
|
|
25
|
-
add(data) {
|
|
26
|
-
const [index] = data;
|
|
27
|
-
if (this.isWithinRange(index)) {
|
|
28
|
-
const internalIndex = index - this.range.from;
|
|
29
|
-
const isUpdate = this.data[internalIndex] !== void 0;
|
|
30
|
-
this.data[internalIndex] = data;
|
|
31
|
-
return isUpdate;
|
|
32
|
-
} else {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
getAtIndex(index) {
|
|
37
|
-
return this.range.isWithin(index) && this.data[index - this.range.from] != null ? this.data[index - this.range.from] : void 0;
|
|
38
|
-
}
|
|
39
|
-
getByKey(key) {
|
|
40
|
-
return this.data.find((row) => row[KEY] === key);
|
|
41
|
-
}
|
|
42
|
-
isWithinRange(index) {
|
|
43
|
-
return this.range.isWithin(index) && index <= this.rowCount;
|
|
44
|
-
}
|
|
45
|
-
setRange(from, to) {
|
|
46
|
-
if (from !== this.range.from || to !== this.range.to) {
|
|
47
|
-
const [overlapFrom, overlapTo] = this.range.overlap(from, to);
|
|
48
|
-
const newData = new Array(to - from);
|
|
49
|
-
for (let i = overlapFrom; i < overlapTo; i++) {
|
|
50
|
-
const data = this.getAtIndex(i);
|
|
51
|
-
if (data) {
|
|
52
|
-
const index = i - from;
|
|
53
|
-
newData[index] = data;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
this.data = newData;
|
|
57
|
-
this.range.from = from;
|
|
58
|
-
this.range.to = to;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
hasData(from, to) {
|
|
62
|
-
const offset = this.range.from;
|
|
63
|
-
const start = from - offset;
|
|
64
|
-
const end = Math.min(to - offset - 1, this.rowCount - 1);
|
|
65
|
-
return this.data[start] !== void 0 && this.data[end] !== void 0;
|
|
66
|
-
}
|
|
67
|
-
getData(from, to) {
|
|
68
|
-
const { from: clientFrom } = this.range;
|
|
69
|
-
const startOffset = Math.max(0, from - clientFrom);
|
|
70
|
-
const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);
|
|
71
|
-
return this.data.slice(startOffset, endOffset);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
exports.DataWindow = DataWindow;
|
|
76
|
-
//# sourceMappingURL=DataWindow.js.map
|