@vuu-ui/vuu-utils 0.8.53 → 0.8.55
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/datasource-utils.js +2 -2
- package/cjs/datasource-utils.js.map +1 -1
- package/cjs/index.js +5 -1
- package/cjs/index.js.map +1 -1
- package/cjs/protocol-message-utils.js +22 -0
- package/cjs/protocol-message-utils.js.map +1 -0
- package/cjs/row-utils.js +4 -9
- package/cjs/row-utils.js.map +1 -1
- package/cjs/selection-utils.js.map +1 -1
- package/esm/datasource-utils.js +2 -2
- package/esm/datasource-utils.js.map +1 -1
- package/esm/index.js +2 -1
- package/esm/index.js.map +1 -1
- package/esm/protocol-message-utils.js +18 -0
- package/esm/protocol-message-utils.js.map +1 -0
- package/esm/row-utils.js +4 -9
- package/esm/row-utils.js.map +1 -1
- package/esm/selection-utils.js.map +1 -1
- package/package.json +6 -6
- package/types/datasource-utils.d.ts +2 -2
- package/types/index.d.ts +1 -0
- package/types/protocol-message-utils.d.ts +5 -0
package/cjs/datasource-utils.js
CHANGED
|
@@ -132,7 +132,7 @@ const isConnectionQualityMetrics = (msg) => msg.type === "connection-metrics";
|
|
|
132
132
|
const messageHasResult = (msg) => typeof msg.result !== "undefined";
|
|
133
133
|
const isErrorResponse = (response) => response !== void 0 && "error" in response;
|
|
134
134
|
const hasAction = (response) => response != void 0 && "action" in response;
|
|
135
|
-
const
|
|
135
|
+
const isViewportMessage = (msg) => "viewport" in msg;
|
|
136
136
|
const withConfigDefaults = (config) => {
|
|
137
137
|
if (config.aggregations && config.columns && config.filter && config.groupBy && config.sort) {
|
|
138
138
|
return config;
|
|
@@ -171,7 +171,7 @@ exports.isFilterChanged = isFilterChanged;
|
|
|
171
171
|
exports.isGroupByChanged = isGroupByChanged;
|
|
172
172
|
exports.isTableSchema = isTableSchema;
|
|
173
173
|
exports.isTypeaheadSuggestionProvider = isTypeaheadSuggestionProvider;
|
|
174
|
-
exports.
|
|
174
|
+
exports.isViewportMessage = isViewportMessage;
|
|
175
175
|
exports.messageHasResult = messageHasResult;
|
|
176
176
|
exports.vanillaConfig = vanillaConfig;
|
|
177
177
|
exports.withConfigDefaults = withConfigDefaults;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource-utils.js","sources":["../src/datasource-utils.ts"],"sourcesContent":["import {\n ConnectionQualityMetrics,\n ConnectionStatusMessage,\n DataSourceConfig,\n MenuRpcResponse,\n RpcResponse,\n TypeaheadSuggestionProvider,\n VuuUIMessageIn,\n VuuUIMessageInRPC,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n VuuUIMessageInTableMeta,\n VuuUIMessageOutViewport,\n WithFilter,\n WithFullConfig,\n WithGroupBy,\n WithSort,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n LinkDescriptorWithLabel,\n VuuFilter,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nexport const NoFilter: VuuFilter = { filter: \"\" };\nexport const NoSort: VuuSort = { sortDefs: [] };\n\nexport const vanillaConfig: WithFullConfig = {\n aggregations: [],\n columns: [],\n filter: NoFilter,\n groupBy: [],\n sort: NoSort,\n};\n\nexport type DataSourceConfigChanges = {\n aggregationsChanged: boolean;\n columnsChanged: boolean;\n filterChanged: boolean;\n groupByChanged: boolean;\n sortChanged: boolean;\n visualLinkChanged: boolean;\n};\n\nexport type MaybeDataSourceConfigChanges = DataSourceConfigChanges & {\n noChanges: boolean;\n};\n\ntype DataConfigPredicate = (\n config: DataSourceConfig,\n newConfig: DataSourceConfig\n) => boolean;\n\nconst equivalentAggregations: DataConfigPredicate = (\n { aggregations: agg1 },\n { aggregations: agg2 }\n) =>\n (agg1 === undefined && agg2?.length === 0) ||\n (agg2 === undefined && agg1?.length === 0);\n\nconst equivalentColumns: DataConfigPredicate = (\n { columns: cols1 },\n { columns: cols2 }\n) =>\n (cols1 === undefined && cols2?.length === 0) ||\n (cols2 === undefined && cols1?.length === 0);\n\nconst equivalentFilter: DataConfigPredicate = (\n { filter: f1 },\n { filter: f2 }\n) =>\n (f1 === undefined && f2?.filter === \"\") ||\n (f2 === undefined && f1?.filter === \"\");\n\nconst equivalentGroupBy: DataConfigPredicate = (\n { groupBy: val1 },\n { groupBy: val2 }\n) =>\n (val1 === undefined && val2?.length === 0) ||\n (val2 === undefined && val1?.length === 0);\n\nconst equivalentSort: DataConfigPredicate = ({ sort: s1 }, { sort: s2 }) =>\n (s1 === undefined && s2?.sortDefs.length === 0) ||\n (s2 === undefined && s1?.sortDefs.length === 0);\n\nconst exactlyTheSame = (a: unknown, b: unknown) => {\n if (a === b) {\n return true;\n } else if (a === undefined && b === undefined) {\n return true;\n } else {\n return false;\n }\n};\n\nconst isAggregationsChanged: DataConfigPredicate = (config, newConfig) => {\n const { aggregations: agg1 } = config;\n const { aggregations: agg2 } = newConfig;\n if (exactlyTheSame(agg1, agg2) || equivalentAggregations(config, newConfig)) {\n return false;\n } else if (agg1 === undefined || agg2 === undefined) {\n return true;\n } else if (agg1.length !== agg2.length) {\n return true;\n }\n return agg1.some(\n ({ column, aggType }, i) =>\n column !== agg2[i].column || aggType !== agg2[i].aggType\n );\n};\n\nconst isColumnsChanged: DataConfigPredicate = (config, newConfig) => {\n const { columns: cols1 } = config;\n const { columns: cols2 } = newConfig;\n\n if (exactlyTheSame(cols1, cols2) || equivalentColumns(config, newConfig)) {\n return false;\n } else if (cols1 === undefined || cols2 === undefined) {\n return true;\n } else if (cols1?.length !== cols2?.length) {\n return true;\n }\n return cols1.some((column, i) => column !== cols2?.[i]);\n};\n\nexport const isFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.filter?.filter !== c2.filter?.filter;\n }\n};\n\nexport const isGroupByChanged: DataConfigPredicate = (config, newConfig) => {\n const { groupBy: g1 } = config;\n const { groupBy: g2 } = newConfig;\n if (exactlyTheSame(g1, g2) || equivalentGroupBy(config, newConfig)) {\n return false;\n } else if (g1 === undefined || g2 === undefined) {\n return true;\n } else if (g1?.length !== g2?.length) {\n return true;\n }\n return g1.some((column, i) => column !== g2?.[i]);\n};\n\nconst isSortChanged: DataConfigPredicate = (config, newConfig) => {\n const { sort: s1 } = config;\n const { sort: s2 } = newConfig;\n if (exactlyTheSame(s1, s2) || equivalentSort(config, newConfig)) {\n return false;\n } else if (s1 === undefined || s2 === undefined) {\n return true;\n } else if (s1?.sortDefs.length !== s2?.sortDefs.length) {\n return true;\n }\n return s1.sortDefs.some(\n ({ column, sortType }, i) =>\n column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType\n );\n};\n\nconst isVisualLinkChanged: DataConfigPredicate = () => {\n // TODO\n return false;\n};\n\nexport const NO_CONFIG_CHANGES: MaybeDataSourceConfigChanges = {\n aggregationsChanged: false,\n columnsChanged: false,\n filterChanged: false,\n groupByChanged: false,\n noChanges: true,\n sortChanged: false,\n visualLinkChanged: false,\n};\n\nexport const isConfigChanged = (\n config: DataSourceConfig | undefined,\n newConfig: DataSourceConfig | undefined\n): MaybeDataSourceConfigChanges => {\n if (exactlyTheSame(config, newConfig)) {\n return NO_CONFIG_CHANGES;\n }\n\n if (config === undefined && newConfig == undefined) {\n return NO_CONFIG_CHANGES;\n } else if (config === undefined) {\n return isConfigChanged({}, newConfig);\n } else if (newConfig === undefined) {\n return isConfigChanged(config, {});\n }\n\n const aggregationsChanged = isAggregationsChanged(config, newConfig);\n const columnsChanged = isColumnsChanged(config, newConfig);\n const filterChanged = isFilterChanged(config, newConfig);\n const groupByChanged = isGroupByChanged(config, newConfig);\n const sortChanged = isSortChanged(config, newConfig);\n const visualLinkChanged = isVisualLinkChanged(config, newConfig);\n\n const noChanges = !(\n aggregationsChanged ||\n columnsChanged ||\n filterChanged ||\n groupByChanged ||\n sortChanged ||\n visualLinkChanged\n );\n\n return {\n aggregationsChanged,\n columnsChanged,\n filterChanged,\n groupByChanged,\n noChanges,\n sortChanged,\n visualLinkChanged,\n };\n};\n\nexport const hasGroupBy = (config?: DataSourceConfig): config is WithGroupBy =>\n config !== undefined &&\n config.groupBy !== undefined &&\n config.groupBy.length > 0;\n\nexport const hasFilter = (config?: DataSourceConfig): config is WithFilter =>\n config?.filter !== undefined && config.filter.filter.length > 0;\n\nexport const hasSort = (config?: DataSourceConfig): config is WithSort =>\n config?.sort !== undefined &&\n Array.isArray(config.sort?.sortDefs) &&\n config.sort.sortDefs.length > 0;\n\nexport const isTypeaheadSuggestionProvider = (\n source: unknown\n): source is TypeaheadSuggestionProvider =>\n typeof (source as TypeaheadSuggestionProvider)[\"getTypeaheadSuggestions\"] ===\n \"function\";\n\nexport const isTableSchema = (\n message: VuuUIMessageIn\n): message is VuuUIMessageInTableMeta => message.type === \"TABLE_META_RESP\";\n\nexport const isConnectionStatusMessage = (\n msg: object | ConnectionStatusMessage\n): msg is ConnectionStatusMessage =>\n (msg as ConnectionStatusMessage).type === \"connection-status\";\n\nexport const isConnectionQualityMetrics = (\n msg: object\n): msg is ConnectionQualityMetrics =>\n (msg as ConnectionQualityMetrics).type === \"connection-metrics\";\n\nexport const messageHasResult = (msg: object): msg is VuuUIMessageInRPC =>\n typeof (msg as VuuUIMessageInRPC).result !== \"undefined\";\n\nexport const isErrorResponse = (\n response?: RpcResponse\n): response is VuuUIMessageInRPCEditReject =>\n response !== undefined && \"error\" in response;\n\nexport const hasAction = (\n response?: RpcResponse\n): response is MenuRpcResponse | VuuUIMessageInRPCEditResponse =>\n response != undefined && \"action\" in response;\n\nexport const isViewporttMessage = (\n msg: object\n): msg is VuuUIMessageOutViewport => \"viewport\" in msg;\n\nexport const withConfigDefaults = (\n config: DataSourceConfig\n): WithFullConfig & { visualLink?: LinkDescriptorWithLabel } => {\n if (\n config.aggregations &&\n config.columns &&\n config.filter &&\n config.groupBy &&\n config.sort\n ) {\n return config as WithFullConfig;\n } else {\n const {\n aggregations = [],\n columns = [],\n filter = { filter: \"\" },\n groupBy = [],\n sort = { sortDefs: [] },\n visualLink,\n } = config;\n\n return {\n aggregations,\n columns,\n filter,\n groupBy,\n sort,\n visualLink,\n };\n }\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"datasource-utils.js","sources":["../src/datasource-utils.ts"],"sourcesContent":["import {\n ConnectionQualityMetrics,\n ConnectionStatusMessage,\n DataSourceConfig,\n MenuRpcResponse,\n RpcResponse,\n TypeaheadSuggestionProvider,\n VuuUIMessageIn,\n VuuUIMessageInRPC,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n VuuUIMessageInTableMeta,\n VuuUIMessageOutViewport,\n WithFilter,\n WithFullConfig,\n WithGroupBy,\n WithSort,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n LinkDescriptorWithLabel,\n VuuFilter,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nexport const NoFilter: VuuFilter = { filter: \"\" };\nexport const NoSort: VuuSort = { sortDefs: [] };\n\nexport const vanillaConfig: WithFullConfig = {\n aggregations: [],\n columns: [],\n filter: NoFilter,\n groupBy: [],\n sort: NoSort,\n};\n\nexport type DataSourceConfigChanges = {\n aggregationsChanged: boolean;\n columnsChanged: boolean;\n filterChanged: boolean;\n groupByChanged: boolean;\n sortChanged: boolean;\n visualLinkChanged: boolean;\n};\n\nexport type MaybeDataSourceConfigChanges = DataSourceConfigChanges & {\n noChanges: boolean;\n};\n\ntype DataConfigPredicate = (\n config: DataSourceConfig,\n newConfig: DataSourceConfig\n) => boolean;\n\nconst equivalentAggregations: DataConfigPredicate = (\n { aggregations: agg1 },\n { aggregations: agg2 }\n) =>\n (agg1 === undefined && agg2?.length === 0) ||\n (agg2 === undefined && agg1?.length === 0);\n\nconst equivalentColumns: DataConfigPredicate = (\n { columns: cols1 },\n { columns: cols2 }\n) =>\n (cols1 === undefined && cols2?.length === 0) ||\n (cols2 === undefined && cols1?.length === 0);\n\nconst equivalentFilter: DataConfigPredicate = (\n { filter: f1 },\n { filter: f2 }\n) =>\n (f1 === undefined && f2?.filter === \"\") ||\n (f2 === undefined && f1?.filter === \"\");\n\nconst equivalentGroupBy: DataConfigPredicate = (\n { groupBy: val1 },\n { groupBy: val2 }\n) =>\n (val1 === undefined && val2?.length === 0) ||\n (val2 === undefined && val1?.length === 0);\n\nconst equivalentSort: DataConfigPredicate = ({ sort: s1 }, { sort: s2 }) =>\n (s1 === undefined && s2?.sortDefs.length === 0) ||\n (s2 === undefined && s1?.sortDefs.length === 0);\n\nconst exactlyTheSame = (a: unknown, b: unknown) => {\n if (a === b) {\n return true;\n } else if (a === undefined && b === undefined) {\n return true;\n } else {\n return false;\n }\n};\n\nconst isAggregationsChanged: DataConfigPredicate = (config, newConfig) => {\n const { aggregations: agg1 } = config;\n const { aggregations: agg2 } = newConfig;\n if (exactlyTheSame(agg1, agg2) || equivalentAggregations(config, newConfig)) {\n return false;\n } else if (agg1 === undefined || agg2 === undefined) {\n return true;\n } else if (agg1.length !== agg2.length) {\n return true;\n }\n return agg1.some(\n ({ column, aggType }, i) =>\n column !== agg2[i].column || aggType !== agg2[i].aggType\n );\n};\n\nconst isColumnsChanged: DataConfigPredicate = (config, newConfig) => {\n const { columns: cols1 } = config;\n const { columns: cols2 } = newConfig;\n\n if (exactlyTheSame(cols1, cols2) || equivalentColumns(config, newConfig)) {\n return false;\n } else if (cols1 === undefined || cols2 === undefined) {\n return true;\n } else if (cols1?.length !== cols2?.length) {\n return true;\n }\n return cols1.some((column, i) => column !== cols2?.[i]);\n};\n\nexport const isFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.filter?.filter !== c2.filter?.filter;\n }\n};\n\nexport const isGroupByChanged: DataConfigPredicate = (config, newConfig) => {\n const { groupBy: g1 } = config;\n const { groupBy: g2 } = newConfig;\n if (exactlyTheSame(g1, g2) || equivalentGroupBy(config, newConfig)) {\n return false;\n } else if (g1 === undefined || g2 === undefined) {\n return true;\n } else if (g1?.length !== g2?.length) {\n return true;\n }\n return g1.some((column, i) => column !== g2?.[i]);\n};\n\nconst isSortChanged: DataConfigPredicate = (config, newConfig) => {\n const { sort: s1 } = config;\n const { sort: s2 } = newConfig;\n if (exactlyTheSame(s1, s2) || equivalentSort(config, newConfig)) {\n return false;\n } else if (s1 === undefined || s2 === undefined) {\n return true;\n } else if (s1?.sortDefs.length !== s2?.sortDefs.length) {\n return true;\n }\n return s1.sortDefs.some(\n ({ column, sortType }, i) =>\n column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType\n );\n};\n\nconst isVisualLinkChanged: DataConfigPredicate = () => {\n // TODO\n return false;\n};\n\nexport const NO_CONFIG_CHANGES: MaybeDataSourceConfigChanges = {\n aggregationsChanged: false,\n columnsChanged: false,\n filterChanged: false,\n groupByChanged: false,\n noChanges: true,\n sortChanged: false,\n visualLinkChanged: false,\n};\n\nexport const isConfigChanged = (\n config: DataSourceConfig | undefined,\n newConfig: DataSourceConfig | undefined\n): MaybeDataSourceConfigChanges => {\n if (exactlyTheSame(config, newConfig)) {\n return NO_CONFIG_CHANGES;\n }\n\n if (config === undefined && newConfig == undefined) {\n return NO_CONFIG_CHANGES;\n } else if (config === undefined) {\n return isConfigChanged({}, newConfig);\n } else if (newConfig === undefined) {\n return isConfigChanged(config, {});\n }\n\n const aggregationsChanged = isAggregationsChanged(config, newConfig);\n const columnsChanged = isColumnsChanged(config, newConfig);\n const filterChanged = isFilterChanged(config, newConfig);\n const groupByChanged = isGroupByChanged(config, newConfig);\n const sortChanged = isSortChanged(config, newConfig);\n const visualLinkChanged = isVisualLinkChanged(config, newConfig);\n\n const noChanges = !(\n aggregationsChanged ||\n columnsChanged ||\n filterChanged ||\n groupByChanged ||\n sortChanged ||\n visualLinkChanged\n );\n\n return {\n aggregationsChanged,\n columnsChanged,\n filterChanged,\n groupByChanged,\n noChanges,\n sortChanged,\n visualLinkChanged,\n };\n};\n\nexport const hasGroupBy = (config?: DataSourceConfig): config is WithGroupBy =>\n config !== undefined &&\n config.groupBy !== undefined &&\n config.groupBy.length > 0;\n\nexport const hasFilter = (config?: DataSourceConfig): config is WithFilter =>\n config?.filter !== undefined && config.filter.filter.length > 0;\n\nexport const hasSort = (config?: DataSourceConfig): config is WithSort =>\n config?.sort !== undefined &&\n Array.isArray(config.sort?.sortDefs) &&\n config.sort.sortDefs.length > 0;\n\nexport const isTypeaheadSuggestionProvider = (\n source: unknown\n): source is TypeaheadSuggestionProvider =>\n typeof (source as TypeaheadSuggestionProvider)[\"getTypeaheadSuggestions\"] ===\n \"function\";\n\nexport const isTableSchema = (\n message: VuuUIMessageIn\n): message is VuuUIMessageInTableMeta => message.type === \"TABLE_META_RESP\";\n\nexport const isConnectionStatusMessage = (\n msg: object | ConnectionStatusMessage\n): msg is ConnectionStatusMessage =>\n (msg as ConnectionStatusMessage).type === \"connection-status\";\n\nexport const isConnectionQualityMetrics = (\n msg: object\n): msg is ConnectionQualityMetrics =>\n (msg as ConnectionQualityMetrics).type === \"connection-metrics\";\n\nexport const messageHasResult = (msg: object): msg is VuuUIMessageInRPC =>\n typeof (msg as VuuUIMessageInRPC).result !== \"undefined\";\n\nexport const isErrorResponse = (\n response?: RpcResponse\n): response is VuuUIMessageInRPCEditReject =>\n response !== undefined && \"error\" in response;\n\nexport const hasAction = (\n response?: RpcResponse\n): response is MenuRpcResponse | VuuUIMessageInRPCEditResponse =>\n response != undefined && \"action\" in response;\n\nexport const isViewportMessage = (\n msg: object\n): msg is VuuUIMessageOutViewport => \"viewport\" in msg;\n\nexport const withConfigDefaults = (\n config: DataSourceConfig\n): WithFullConfig & { visualLink?: LinkDescriptorWithLabel } => {\n if (\n config.aggregations &&\n config.columns &&\n config.filter &&\n config.groupBy &&\n config.sort\n ) {\n return config as WithFullConfig;\n } else {\n const {\n aggregations = [],\n columns = [],\n filter = { filter: \"\" },\n groupBy = [],\n sort = { sortDefs: [] },\n visualLink,\n } = config;\n\n return {\n aggregations,\n columns,\n filter,\n groupBy,\n sort,\n visualLink,\n };\n }\n};\n"],"names":[],"mappings":"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"}
|
package/cjs/index.js
CHANGED
|
@@ -37,6 +37,7 @@ var index = require('./nanoid/index.js');
|
|
|
37
37
|
var reactUtils = require('./react-utils.js');
|
|
38
38
|
var roundDecimal = require('./round-decimal.js');
|
|
39
39
|
var perfUtils = require('./perf-utils.js');
|
|
40
|
+
var protocolMessageUtils = require('./protocol-message-utils.js');
|
|
40
41
|
var rangeUtils = require('./range-utils.js');
|
|
41
42
|
var rowUtils = require('./row-utils.js');
|
|
42
43
|
var selectionUtils = require('./selection-utils.js');
|
|
@@ -171,7 +172,7 @@ exports.isFilterChanged = datasourceUtils.isFilterChanged;
|
|
|
171
172
|
exports.isGroupByChanged = datasourceUtils.isGroupByChanged;
|
|
172
173
|
exports.isTableSchema = datasourceUtils.isTableSchema;
|
|
173
174
|
exports.isTypeaheadSuggestionProvider = datasourceUtils.isTypeaheadSuggestionProvider;
|
|
174
|
-
exports.
|
|
175
|
+
exports.isViewportMessage = datasourceUtils.isViewportMessage;
|
|
175
176
|
exports.messageHasResult = datasourceUtils.messageHasResult;
|
|
176
177
|
exports.vanillaConfig = datasourceUtils.vanillaConfig;
|
|
177
178
|
exports.withConfigDefaults = datasourceUtils.withConfigDefaults;
|
|
@@ -257,6 +258,9 @@ exports.asReactElements = reactUtils.asReactElements;
|
|
|
257
258
|
exports.roundDecimal = roundDecimal.roundDecimal;
|
|
258
259
|
exports.debounce = perfUtils.debounce;
|
|
259
260
|
exports.throttle = perfUtils.throttle;
|
|
261
|
+
exports.isOpenDialogAction = protocolMessageUtils.isOpenDialogAction;
|
|
262
|
+
exports.isOpenSessionTableDialogMessage = protocolMessageUtils.isOpenSessionTableDialogMessage;
|
|
263
|
+
exports.isVuuMenuRpcRequest = protocolMessageUtils.isVuuMenuRpcRequest;
|
|
260
264
|
exports.NULL_RANGE = rangeUtils.NULL_RANGE;
|
|
261
265
|
exports.WindowRange = rangeUtils.WindowRange;
|
|
262
266
|
exports.getFullRange = rangeUtils.getFullRange;
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const MENU_RPC_TYPES = [
|
|
4
|
+
"VIEW_PORT_MENUS_SELECT_RPC",
|
|
5
|
+
"VIEW_PORT_MENU_TABLE_RPC",
|
|
6
|
+
"VIEW_PORT_MENU_ROW_RPC",
|
|
7
|
+
"VIEW_PORT_MENU_CELL_RPC",
|
|
8
|
+
"VP_EDIT_CELL_RPC",
|
|
9
|
+
"VP_EDIT_ROW_RPC",
|
|
10
|
+
"VP_EDIT_ADD_ROW_RPC",
|
|
11
|
+
"VP_EDIT_DELETE_CELL_RPC",
|
|
12
|
+
"VP_EDIT_DELETE_ROW_RPC",
|
|
13
|
+
"VP_EDIT_SUBMIT_FORM_RPC"
|
|
14
|
+
];
|
|
15
|
+
const isVuuMenuRpcRequest = (message) => MENU_RPC_TYPES.includes(message["type"]);
|
|
16
|
+
const isOpenSessionTableDialogMessage = (rpcResponse) => rpcResponse.type === "VIEW_PORT_MENU_RESP" && isOpenDialogAction(rpcResponse.action) && rpcResponse.action.tableSchema !== void 0;
|
|
17
|
+
const isOpenDialogAction = (action) => action !== void 0 && action.type === "OPEN_DIALOG_ACTION";
|
|
18
|
+
|
|
19
|
+
exports.isOpenDialogAction = isOpenDialogAction;
|
|
20
|
+
exports.isOpenSessionTableDialogMessage = isOpenSessionTableDialogMessage;
|
|
21
|
+
exports.isVuuMenuRpcRequest = isVuuMenuRpcRequest;
|
|
22
|
+
//# sourceMappingURL=protocol-message-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol-message-utils.js","sources":["../src/protocol-message-utils.ts"],"sourcesContent":["import {\n MenuRpcAction,\n MenuRpcResponse,\n OpenDialogAction,\n RpcResponse,\n VuuUIMessageOut,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n ClientToServerMenuRPC,\n VuuRpcRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nconst MENU_RPC_TYPES = [\n \"VIEW_PORT_MENUS_SELECT_RPC\",\n \"VIEW_PORT_MENU_TABLE_RPC\",\n \"VIEW_PORT_MENU_ROW_RPC\",\n \"VIEW_PORT_MENU_CELL_RPC\",\n \"VP_EDIT_CELL_RPC\",\n \"VP_EDIT_ROW_RPC\",\n \"VP_EDIT_ADD_ROW_RPC\",\n \"VP_EDIT_DELETE_CELL_RPC\",\n \"VP_EDIT_DELETE_ROW_RPC\",\n \"VP_EDIT_SUBMIT_FORM_RPC\",\n];\n\nexport const isVuuMenuRpcRequest = (\n message: VuuUIMessageOut | VuuRpcRequest | ClientToServerMenuRPC\n): message is ClientToServerMenuRPC => MENU_RPC_TYPES.includes(message[\"type\"]);\n\nexport const isOpenSessionTableDialogMessage = (\n rpcResponse: RpcResponse\n): rpcResponse is MenuRpcResponse<OpenDialogAction> =>\n rpcResponse.type === \"VIEW_PORT_MENU_RESP\" &&\n isOpenDialogAction(rpcResponse.action) &&\n rpcResponse.action.tableSchema !== undefined;\n\nexport const isOpenDialogAction = (\n action?: MenuRpcAction\n): action is OpenDialogAction =>\n action !== undefined && action.type === \"OPEN_DIALOG_ACTION\";\n"],"names":[],"mappings":";;AAYA,MAAM,cAAiB,GAAA;AAAA,EACrB,4BAAA;AAAA,EACA,0BAAA;AAAA,EACA,wBAAA;AAAA,EACA,yBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wBAAA;AAAA,EACA,yBAAA;AACF,CAAA,CAAA;AAEO,MAAM,sBAAsB,CACjC,OAAA,KACqC,eAAe,QAAS,CAAA,OAAA,CAAQ,MAAM,CAAC,EAAA;AAEvE,MAAM,+BAAkC,GAAA,CAC7C,WAEA,KAAA,WAAA,CAAY,IAAS,KAAA,qBAAA,IACrB,kBAAmB,CAAA,WAAA,CAAY,MAAM,CAAA,IACrC,WAAY,CAAA,MAAA,CAAO,WAAgB,KAAA,KAAA,EAAA;AAE9B,MAAM,qBAAqB,CAChC,MAAA,KAEA,MAAW,KAAA,KAAA,CAAA,IAAa,OAAO,IAAS,KAAA;;;;;;"}
|
package/cjs/row-utils.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var columnUtils = require('./column-utils.js');
|
|
4
|
+
var selectionUtils = require('./selection-utils.js');
|
|
4
5
|
|
|
5
|
-
const { IS_LEAF, KEY, IDX
|
|
6
|
+
const { IS_LEAF, KEY, IDX } = columnUtils.metadataKeys;
|
|
6
7
|
const actualRowPositioning = (rowHeight) => [
|
|
7
8
|
(row) => row[IDX] * rowHeight,
|
|
8
9
|
(position) => Math.floor(position / rowHeight),
|
|
@@ -56,18 +57,12 @@ const getIndexFromRowElement = (rowElement) => {
|
|
|
56
57
|
}
|
|
57
58
|
};
|
|
58
59
|
const asDataSourceRowObject = (row, columnMap) => {
|
|
59
|
-
|
|
60
|
-
const {
|
|
61
|
-
[IS_LEAF]: isLeaf,
|
|
62
|
-
[KEY]: key,
|
|
63
|
-
[IDX]: index,
|
|
64
|
-
[SELECTED]: selected
|
|
65
|
-
} = row;
|
|
60
|
+
const { [IS_LEAF]: isLeaf, [KEY]: key, [IDX]: index } = row;
|
|
66
61
|
const rowObject = {
|
|
67
62
|
key,
|
|
68
63
|
index,
|
|
69
64
|
isGroupRow: !isLeaf,
|
|
70
|
-
isSelected:
|
|
65
|
+
isSelected: selectionUtils.isRowSelected(row),
|
|
71
66
|
data: {}
|
|
72
67
|
};
|
|
73
68
|
for (const [colName, colIdx] of Object.entries(columnMap)) {
|
package/cjs/row-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"row-utils.js","sources":["../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 type { MutableRefObject } from \"react\";\nimport { ColumnMap, metadataKeys } from \"./column-utils\";\n\nconst { IS_LEAF, KEY, IDX
|
|
1
|
+
{"version":3,"file":"row-utils.js","sources":["../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 type { MutableRefObject } from \"react\";\nimport { ColumnMap, metadataKeys } from \"./column-utils\";\nimport { isRowSelected } from \"./selection-utils\";\n\nconst { IS_LEAF, KEY, IDX } = metadataKeys;\n\nexport type RowOffsetFunc = (\n row: DataSourceRow,\n pctScrollTop?: number\n) => 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 (row) => row[IDX] * 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: MutableRefObject<number>\n): RowPositioning => [\n (row, offset = 0) => {\n const rowOffset = pctScrollTop.current * virtualisedExtent;\n return (row[IDX] - 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\nexport const getRowElementAtIndex = (\n container: HTMLDivElement | EventTarget,\n rowIndex: number\n) => {\n if (rowIndex === -1) {\n return null;\n } else {\n const activeRow = (container as HTMLElement).querySelector(\n `[aria-rowindex=\"${rowIndex + 1}\"]`\n ) as HTMLElement;\n\n if (activeRow) {\n return activeRow;\n } else {\n throw Error(\n `getRowElementAtIndex no row found for index index ${rowIndex}`\n );\n }\n }\n};\n\nexport const getIndexFromRowElement = (rowElement: HTMLElement) => {\n const rowIndex = rowElement.ariaRowIndex;\n if (rowIndex != null) {\n const index = parseInt(rowIndex) - 1;\n if (!isNaN(index)) {\n return index;\n } else {\n throw Error(\n `getIndexFromRowElement row element aria rowindex invalid ${rowIndex}`\n );\n }\n } else {\n throw Error(\n \"getIndexFromRowElement row element does not have aria rowindex\"\n );\n }\n};\n\nexport const asDataSourceRowObject = (\n row: DataSourceRow,\n columnMap: 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: isRowSelected(row),\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"],"names":["metadataKeys","isRowSelected"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection-utils.js","sources":["../src/selection-utils.ts"],"sourcesContent":["import {\n DataSourceRow,\n RangeTuple,\n Selection,\n SelectionItem,\n} from \"@vuu-ui/vuu-data-types\";\nimport { TableSelectionModel } from \"@vuu-ui/vuu-table-types\";\nimport { metadataKeys } from \"./column-utils\";\n\nconst NO_SELECTION: number[] = [];\n\nconst { SELECTED } = metadataKeys;\n\nexport const RowSelected = {\n False: 0,\n True: 1,\n First: 2,\n Last: 4,\n};\n\nexport const isRowSelected = (row: DataSourceRow): boolean =>\n (row[SELECTED] & RowSelected.True) === RowSelected.True;\nexport const isRowSelectedLast = (row?: DataSourceRow): boolean =>\n row !== undefined && (row[SELECTED] & RowSelected.Last) === RowSelected.Last;\n\nconst inAscendingOrder = (item1: SelectionItem, item2: SelectionItem) => {\n const n1: number = typeof item1 === \"number\" ? item1 : item1[0];\n const n2: number = typeof item2 === \"number\" ? item2 : item2[0];\n return n1 - n2;\n};\n\nexport const deselectItem = (\n selectionModel: TableSelectionModel,\n selected: Selection,\n itemIndex: number,\n rangeSelect: boolean,\n keepExistingSelection = false\n): Selection => {\n const singleSelect = selectionModel === \"single\";\n const multiSelect =\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const actsLikeSingleSelect =\n singleSelect || (multiSelect && !keepExistingSelection && !rangeSelect);\n\n if (actsLikeSingleSelect || (!rangeSelect && !keepExistingSelection)) {\n return NO_SELECTION;\n } else if (!rangeSelect && keepExistingSelection) {\n return removeSelectedItem(selected, itemIndex);\n }\n return NO_SELECTION;\n};\n\nconst newSelectedFillsGapOrExtends = (\n selection: Selection,\n itemIndex: number\n): boolean => {\n for (let i = 0; i < selection.length; i++) {\n const item = selection[i];\n if (typeof item === \"number\") {\n if (item === itemIndex - 1) {\n return true;\n } else if (item > itemIndex) {\n return false;\n }\n } else if (item[0] === itemIndex + 1 || item[1] === itemIndex - 1) {\n return true;\n } else if (item[0] > itemIndex) {\n return false;\n }\n }\n return false;\n};\n\nconst fillGapOrExtendSelection = (\n selection: Selection,\n itemIndex: number\n): Selection => {\n for (let i = 0; i < selection.length; i++) {\n const item = selection[i];\n if (typeof item === \"number\") {\n if (item === itemIndex - 1) {\n const nextSelectionItem = selection[i + 1];\n if (nextSelectionItem === itemIndex + 1) {\n const newRange: SelectionItem = [item, nextSelectionItem];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else {\n const newRange: SelectionItem = [item, itemIndex];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n }\n } else if (item > itemIndex) {\n break;\n }\n } else if (item[0] === itemIndex + 1) {\n const newRange: SelectionItem = [itemIndex, item[1]];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n } else if (item[1] === itemIndex - 1) {\n // check to see whether another contiguous range follows\n const nextItem = selection[i + 1];\n if (Array.isArray(nextItem) && nextItem[0] === itemIndex + 1) {\n const newRange: SelectionItem = [item[0], nextItem[1]];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else if (typeof nextItem === \"number\" && nextItem === itemIndex + 1) {\n const newRange: SelectionItem = [item[0], nextItem];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else {\n const newRange: SelectionItem = [item[0], itemIndex];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n }\n }\n }\n\n return selection;\n};\n\nexport const selectItem = (\n selectionModel: TableSelectionModel,\n selected: Selection,\n itemIndex: number,\n rangeSelect: boolean,\n keepExistingSelection = false,\n activeItemIndex = -1\n): Selection => {\n const singleSelect = selectionModel === \"single\";\n const multiSelect =\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const actsLikeSingleSelect =\n singleSelect || (multiSelect && !keepExistingSelection && !rangeSelect);\n\n if (selectionModel === \"none\") {\n return NO_SELECTION;\n } else if (actsLikeSingleSelect) {\n return [itemIndex];\n } else if (rangeSelect) {\n if (selected.length === 0) {\n return [itemIndex];\n } else {\n const range: RangeTuple =\n itemIndex > activeItemIndex\n ? [activeItemIndex, itemIndex]\n : [itemIndex, activeItemIndex];\n return insertRange(selected, range);\n }\n } else if (!rangeSelect) {\n // what if we now have a range because we just filled agap between 2\n if (newSelectedFillsGapOrExtends(selected, itemIndex)) {\n return fillGapOrExtendSelection(selected, itemIndex);\n } else {\n return selected?.concat(itemIndex).sort(inAscendingOrder);\n }\n } else if (multiSelect) {\n // const [from, to] = idx > active ? [active, idx] : [idx, active];\n // newSelected = selected?.slice();\n // for (let i = from; i <= to; i++) {\n // if (!selected?.includes(i)) {\n // newSelected.push(i);\n // }\n // }\n }\n return NO_SELECTION;\n};\n\nfunction removeSelectedItem(selected: Selection, itemIndex: number) {\n if (selected.includes(itemIndex)) {\n return selected.filter((selectedItem) => selectedItem !== itemIndex);\n } else {\n const newSelected: Selection = [];\n for (const selectedItem of selected) {\n if (Array.isArray(selectedItem)) {\n if (rangeIncludes(selectedItem, itemIndex)) {\n newSelected.push(...splitRange(selectedItem, itemIndex));\n } else {\n newSelected.push(selectedItem);\n }\n } else {\n newSelected.push(selectedItem);\n }\n }\n return newSelected;\n }\n}\n\nfunction insertRange(selected: Selection, range: RangeTuple): Selection {\n const [from, to] = range;\n return selected.reduce<Selection>((newSelected, selectedItem) => {\n if (typeof selectedItem === \"number\") {\n if (selectedItem < from || selectedItem > to) {\n newSelected.push(selectedItem);\n } else if (!includedInRange(newSelected.at(-1), selectedItem)) {\n newSelected.push(range);\n }\n } else if (overlappingRange(selectedItem, range)) {\n newSelected.push(mergeRanges(selectedItem, range));\n } else {\n if (range[1] < selectedItem[0]) {\n newSelected.push(range);\n }\n newSelected.push(selectedItem);\n }\n\n return newSelected;\n }, []);\n}\n\nconst overlappingRange = (r1: RangeTuple, r2: RangeTuple) =>\n (r1[1] >= r2[0] && r1[1] <= r2[1]) || (r1[0] >= r2[0] && r1[0] <= r2[1]);\nconst mergeRanges = (r1: RangeTuple, r2: RangeTuple): RangeTuple => [\n Math.min(r1[0], r2[0]),\n Math.max(r1[1], r2[1]),\n];\n\nconst includedInRange = (\n selectedItem: SelectionItem | undefined,\n index: number\n) => {\n if (typeof selectedItem === \"undefined\" || typeof selectedItem === \"number\") {\n return false;\n } else return rangeIncludes(selectedItem, index);\n};\n\nconst rangeIncludes = (range: RangeTuple, index: number) =>\n index >= range[0] && index <= range[1];\n\nconst SINGLE_SELECTED_ROW =\n RowSelected.True + RowSelected.First + RowSelected.Last;\nconst FIRST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.First;\nconst LAST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.Last;\n\n/**\n * Determine the value for selected. We use a bitmap to represent a number of selection states\n * a row might exhibit. selected/not-selected is the fundamental value. We also identify first\n * row of a selected block, last row of a selected block;\n */\nexport const getSelectionStatus = (\n selected: Selection,\n itemIndex: number\n): number => {\n for (const item of selected) {\n if (typeof item === \"number\") {\n if (item === itemIndex) {\n return SINGLE_SELECTED_ROW;\n }\n } else if (rangeIncludes(item, itemIndex)) {\n if (itemIndex === item[0]) {\n return FIRST_SELECTED_ROW_OF_BLOCK;\n } else if (itemIndex === item[1]) {\n return LAST_SELECTED_ROW_OF_BLOCK;\n } else {\n return RowSelected.True;\n }\n }\n }\n return RowSelected.False;\n};\n\nexport const isSelected = (selected: Selection, itemIndex: number) => {\n for (const item of selected) {\n if (typeof item === \"number\") {\n if (item === itemIndex) {\n return true;\n } else if (item > itemIndex) {\n return false;\n }\n } else if (rangeIncludes(item, itemIndex)) {\n return true;\n } else if (item[0] > itemIndex) {\n return false;\n }\n }\n\n return false;\n};\n/**\n * Vuu server expects a full list if indexes of selected rows. Client represents selection in a more\n * efficient structure. This converts client structure to full server format.\n */\nexport const expandSelection = (selected: Selection): number[] => {\n if (selected.every((selectedItem) => typeof selectedItem === \"number\")) {\n return selected as number[];\n }\n const expandedSelected = [];\n for (const selectedItem of selected) {\n if (typeof selectedItem === \"number\") {\n expandedSelected.push(selectedItem);\n } else {\n for (let i = selectedItem[0]; i <= selectedItem[1]; i++) {\n expandedSelected.push(i);\n }\n }\n }\n return expandedSelected;\n};\n\nfunction splitRange([from, to]: RangeTuple, itemIndex: number): Selection {\n if (itemIndex === from) {\n return [[from + 1, to]];\n } else if (itemIndex === to) {\n return [[from, to - 1]];\n } else if (to - from === 2) {\n return [from, to];\n } else if (itemIndex === to - 1) {\n return [[from, to - 2], to];\n } else {\n return [\n [from, itemIndex - 1],\n [itemIndex + 1, to],\n ];\n }\n}\n\nexport type SelectionDiff = {\n added: SelectionItem[];\n removed: SelectionItem[];\n};\n"],"names":["metadataKeys"],"mappings":";;;;AASA,MAAM,eAAyB,EAAC,CAAA;AAEhC,MAAM,EAAE,UAAa,GAAAA,wBAAA,CAAA;AAEd,MAAM,WAAc,GAAA;AAAA,EACzB,KAAO,EAAA,CAAA;AAAA,EACP,IAAM,EAAA,CAAA;AAAA,EACN,KAAO,EAAA,CAAA;AAAA,EACP,IAAM,EAAA,CAAA;AACR,EAAA;AAEa,MAAA,aAAA,GAAgB,CAAC,GAC3B,KAAA,CAAA,GAAA,CAAI,QAAQ,CAAI,GAAA,WAAA,CAAY,UAAU,WAAY,CAAA,KAAA;AACxC,MAAA,iBAAA,GAAoB,CAAC,GAAA,KAChC,GAAQ,KAAA,KAAA,CAAA,IAAA,CAAc,IAAI,QAAQ,CAAA,GAAI,WAAY,CAAA,IAAA,MAAU,WAAY,CAAA,KAAA;AAE1E,MAAM,gBAAA,GAAmB,CAAC,KAAA,EAAsB,KAAyB,KAAA;AACvE,EAAA,MAAM,KAAa,OAAO,KAAA,KAAU,QAAW,GAAA,KAAA,GAAQ,MAAM,CAAC,CAAA,CAAA;AAC9D,EAAA,MAAM,KAAa,OAAO,KAAA,KAAU,QAAW,GAAA,KAAA,GAAQ,MAAM,CAAC,CAAA,CAAA;AAC9D,EAAA,OAAO,EAAK,GAAA,EAAA,CAAA;AACd,CAAA,CAAA;AAEO,MAAM,eAAe,CAC1B,cAAA,EACA,UACA,SACA,EAAA,WAAA,EACA,wBAAwB,KACV,KAAA;AACd,EAAA,MAAM,eAAe,cAAmB,KAAA,QAAA,CAAA;AACxC,EAAM,MAAA,WAAA,GACJ,cAAmB,KAAA,UAAA,IAAc,cAAmB,KAAA,UAAA,CAAA;AACtD,EAAA,MAAM,oBACJ,GAAA,YAAA,IAAiB,WAAe,IAAA,CAAC,yBAAyB,CAAC,WAAA,CAAA;AAE7D,EAAA,IAAI,oBAAyB,IAAA,CAAC,WAAe,IAAA,CAAC,qBAAwB,EAAA;AACpE,IAAO,OAAA,YAAA,CAAA;AAAA,GACT,MAAA,IAAW,CAAC,WAAA,IAAe,qBAAuB,EAAA;AAChD,IAAO,OAAA,kBAAA,CAAmB,UAAU,SAAS,CAAA,CAAA;AAAA,GAC/C;AACA,EAAO,OAAA,YAAA,CAAA;AACT,EAAA;AAEA,MAAM,4BAAA,GAA+B,CACnC,SAAA,EACA,SACY,KAAA;AACZ,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,SAAA,CAAU,QAAQ,CAAK,EAAA,EAAA;AACzC,IAAM,MAAA,IAAA,GAAO,UAAU,CAAC,CAAA,CAAA;AACxB,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,MAAI,IAAA,IAAA,KAAS,YAAY,CAAG,EAAA;AAC1B,QAAO,OAAA,IAAA,CAAA;AAAA,OACT,MAAA,IAAW,OAAO,SAAW,EAAA;AAC3B,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF,MAAA,IAAW,IAAK,CAAA,CAAC,CAAM,KAAA,SAAA,GAAY,KAAK,IAAK,CAAA,CAAC,CAAM,KAAA,SAAA,GAAY,CAAG,EAAA;AACjE,MAAO,OAAA,IAAA,CAAA;AAAA,KACE,MAAA,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,SAAW,EAAA;AAC9B,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,GACF;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,wBAAA,GAA2B,CAC/B,SAAA,EACA,SACc,KAAA;AACd,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,SAAA,CAAU,QAAQ,CAAK,EAAA,EAAA;AACzC,IAAM,MAAA,IAAA,GAAO,UAAU,CAAC,CAAA,CAAA;AACxB,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,MAAI,IAAA,IAAA,KAAS,YAAY,CAAG,EAAA;AAC1B,QAAM,MAAA,iBAAA,GAAoB,SAAU,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AACzC,QAAI,IAAA,iBAAA,KAAsB,YAAY,CAAG,EAAA;AACvC,UAAM,MAAA,QAAA,GAA0B,CAAC,IAAA,EAAM,iBAAiB,CAAA,CAAA;AACxD,UAAA,OAAO,SACJ,CAAA,KAAA,CAAM,CAAG,EAAA,CAAC,EACV,MAAO,CAAA,CAAC,QAAQ,CAAC,EACjB,MAAO,CAAA,SAAA,CAAU,KAAM,CAAA,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA;AAAA,SAC3B,MAAA;AACL,UAAM,MAAA,QAAA,GAA0B,CAAC,IAAA,EAAM,SAAS,CAAA,CAAA;AAChD,UAAA,OAAO,SACJ,CAAA,KAAA,CAAM,CAAG,EAAA,CAAC,EACV,MAAO,CAAA,CAAC,QAAQ,CAAC,EACjB,MAAO,CAAA,SAAA,CAAU,KAAM,CAAA,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA;AAAA,SAClC;AAAA,OACF,MAAA,IAAW,OAAO,SAAW,EAAA;AAC3B,QAAA,MAAA;AAAA,OACF;AAAA,KACS,MAAA,IAAA,IAAA,CAAK,CAAC,CAAA,KAAM,YAAY,CAAG,EAAA;AACpC,MAAA,MAAM,QAA0B,GAAA,CAAC,SAAW,EAAA,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AACnD,MAAA,OAAO,SACJ,CAAA,KAAA,CAAM,CAAG,EAAA,CAAC,EACV,MAAO,CAAA,CAAC,QAAQ,CAAC,EACjB,MAAO,CAAA,SAAA,CAAU,KAAM,CAAA,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA;AAAA,KACvB,MAAA,IAAA,IAAA,CAAK,CAAC,CAAA,KAAM,YAAY,CAAG,EAAA;AAEpC,MAAM,MAAA,QAAA,GAAW,SAAU,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAChC,MAAI,IAAA,KAAA,CAAM,QAAQ,QAAQ,CAAA,IAAK,SAAS,CAAC,CAAA,KAAM,YAAY,CAAG,EAAA;AAC5D,QAAA,MAAM,WAA0B,CAAC,IAAA,CAAK,CAAC,CAAG,EAAA,QAAA,CAAS,CAAC,CAAC,CAAA,CAAA;AACrD,QAAA,OAAO,SACJ,CAAA,KAAA,CAAM,CAAG,EAAA,CAAC,EACV,MAAO,CAAA,CAAC,QAAQ,CAAC,EACjB,MAAO,CAAA,SAAA,CAAU,KAAM,CAAA,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA;AAAA,iBACvB,OAAO,QAAA,KAAa,QAAY,IAAA,QAAA,KAAa,YAAY,CAAG,EAAA;AACrE,QAAA,MAAM,QAA0B,GAAA,CAAC,IAAK,CAAA,CAAC,GAAG,QAAQ,CAAA,CAAA;AAClD,QAAA,OAAO,SACJ,CAAA,KAAA,CAAM,CAAG,EAAA,CAAC,EACV,MAAO,CAAA,CAAC,QAAQ,CAAC,EACjB,MAAO,CAAA,SAAA,CAAU,KAAM,CAAA,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA;AAAA,OAC3B,MAAA;AACL,QAAA,MAAM,QAA0B,GAAA,CAAC,IAAK,CAAA,CAAC,GAAG,SAAS,CAAA,CAAA;AACnD,QAAA,OAAO,SACJ,CAAA,KAAA,CAAM,CAAG,EAAA,CAAC,EACV,MAAO,CAAA,CAAC,QAAQ,CAAC,EACjB,MAAO,CAAA,SAAA,CAAU,KAAM,CAAA,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA;AAAA,OAClC;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,SAAA,CAAA;AACT,CAAA,CAAA;AAEa,MAAA,UAAA,GAAa,CACxB,cACA,EAAA,QAAA,EACA,WACA,WACA,EAAA,qBAAA,GAAwB,KACxB,EAAA,eAAA,GAAkB,CACJ,CAAA,KAAA;AACd,EAAA,MAAM,eAAe,cAAmB,KAAA,QAAA,CAAA;AACxC,EAAM,MAAA,WAAA,GACJ,cAAmB,KAAA,UAAA,IAAc,cAAmB,KAAA,UAAA,CAAA;AACtD,EAAA,MAAM,oBACJ,GAAA,YAAA,IAAiB,WAAe,IAAA,CAAC,yBAAyB,CAAC,WAAA,CAAA;AAE7D,EAAA,IAAI,mBAAmB,MAAQ,EAAA;AAC7B,IAAO,OAAA,YAAA,CAAA;AAAA,aACE,oBAAsB,EAAA;AAC/B,IAAA,OAAO,CAAC,SAAS,CAAA,CAAA;AAAA,aACR,WAAa,EAAA;AACtB,IAAI,IAAA,QAAA,CAAS,WAAW,CAAG,EAAA;AACzB,MAAA,OAAO,CAAC,SAAS,CAAA,CAAA;AAAA,KACZ,MAAA;AACL,MAAM,MAAA,KAAA,GACJ,YAAY,eACR,GAAA,CAAC,iBAAiB,SAAS,CAAA,GAC3B,CAAC,SAAA,EAAW,eAAe,CAAA,CAAA;AACjC,MAAO,OAAA,WAAA,CAAY,UAAU,KAAK,CAAA,CAAA;AAAA,KACpC;AAAA,GACF,MAAA,IAAW,CAAC,WAAa,EAAA;AAEvB,IAAI,IAAA,4BAAA,CAA6B,QAAU,EAAA,SAAS,CAAG,EAAA;AACrD,MAAO,OAAA,wBAAA,CAAyB,UAAU,SAAS,CAAA,CAAA;AAAA,KAC9C,MAAA;AACL,MAAA,OAAO,QAAU,EAAA,MAAA,CAAO,SAAS,CAAA,CAAE,KAAK,gBAAgB,CAAA,CAAA;AAAA,KAC1D;AAAA,UASF;AACA,EAAO,OAAA,YAAA,CAAA;AACT,EAAA;AAEA,SAAS,kBAAA,CAAmB,UAAqB,SAAmB,EAAA;AAClE,EAAI,IAAA,QAAA,CAAS,QAAS,CAAA,SAAS,CAAG,EAAA;AAChC,IAAA,OAAO,QAAS,CAAA,MAAA,CAAO,CAAC,YAAA,KAAiB,iBAAiB,SAAS,CAAA,CAAA;AAAA,GAC9D,MAAA;AACL,IAAA,MAAM,cAAyB,EAAC,CAAA;AAChC,IAAA,KAAA,MAAW,gBAAgB,QAAU,EAAA;AACnC,MAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,YAAY,CAAG,EAAA;AAC/B,QAAI,IAAA,aAAA,CAAc,YAAc,EAAA,SAAS,CAAG,EAAA;AAC1C,UAAA,WAAA,CAAY,IAAK,CAAA,GAAG,UAAW,CAAA,YAAA,EAAc,SAAS,CAAC,CAAA,CAAA;AAAA,SAClD,MAAA;AACL,UAAA,WAAA,CAAY,KAAK,YAAY,CAAA,CAAA;AAAA,SAC/B;AAAA,OACK,MAAA;AACL,QAAA,WAAA,CAAY,KAAK,YAAY,CAAA,CAAA;AAAA,OAC/B;AAAA,KACF;AACA,IAAO,OAAA,WAAA,CAAA;AAAA,GACT;AACF,CAAA;AAEA,SAAS,WAAA,CAAY,UAAqB,KAA8B,EAAA;AACtE,EAAM,MAAA,CAAC,IAAM,EAAA,EAAE,CAAI,GAAA,KAAA,CAAA;AACnB,EAAA,OAAO,QAAS,CAAA,MAAA,CAAkB,CAAC,WAAA,EAAa,YAAiB,KAAA;AAC/D,IAAI,IAAA,OAAO,iBAAiB,QAAU,EAAA;AACpC,MAAI,IAAA,YAAA,GAAe,IAAQ,IAAA,YAAA,GAAe,EAAI,EAAA;AAC5C,QAAA,WAAA,CAAY,KAAK,YAAY,CAAA,CAAA;AAAA,OAC/B,MAAA,IAAW,CAAC,eAAgB,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA,CAAA,EAAG,YAAY,CAAG,EAAA;AAC7D,QAAA,WAAA,CAAY,KAAK,KAAK,CAAA,CAAA;AAAA,OACxB;AAAA,KACS,MAAA,IAAA,gBAAA,CAAiB,YAAc,EAAA,KAAK,CAAG,EAAA;AAChD,MAAA,WAAA,CAAY,IAAK,CAAA,WAAA,CAAY,YAAc,EAAA,KAAK,CAAC,CAAA,CAAA;AAAA,KAC5C,MAAA;AACL,MAAA,IAAI,KAAM,CAAA,CAAC,CAAI,GAAA,YAAA,CAAa,CAAC,CAAG,EAAA;AAC9B,QAAA,WAAA,CAAY,KAAK,KAAK,CAAA,CAAA;AAAA,OACxB;AACA,MAAA,WAAA,CAAY,KAAK,YAAY,CAAA,CAAA;AAAA,KAC/B;AAEA,IAAO,OAAA,WAAA,CAAA;AAAA,GACT,EAAG,EAAE,CAAA,CAAA;AACP,CAAA;AAEA,MAAM,gBAAA,GAAmB,CAAC,EAAA,EAAgB,EACvC,KAAA,EAAA,CAAG,CAAC,CAAA,IAAK,EAAG,CAAA,CAAC,CAAK,IAAA,EAAA,CAAG,CAAC,CAAA,IAAK,GAAG,CAAC,CAAA,IAAO,EAAG,CAAA,CAAC,CAAK,IAAA,EAAA,CAAG,CAAC,CAAA,IAAK,EAAG,CAAA,CAAC,CAAK,IAAA,EAAA,CAAG,CAAC,CAAA,CAAA;AACxE,MAAM,WAAA,GAAc,CAAC,EAAA,EAAgB,EAA+B,KAAA;AAAA,EAClE,KAAK,GAAI,CAAA,EAAA,CAAG,CAAC,CAAG,EAAA,EAAA,CAAG,CAAC,CAAC,CAAA;AAAA,EACrB,KAAK,GAAI,CAAA,EAAA,CAAG,CAAC,CAAG,EAAA,EAAA,CAAG,CAAC,CAAC,CAAA;AACvB,CAAA,CAAA;AAEA,MAAM,eAAA,GAAkB,CACtB,YAAA,EACA,KACG,KAAA;AACH,EAAA,IAAI,OAAO,YAAA,KAAiB,WAAe,IAAA,OAAO,iBAAiB,QAAU,EAAA;AAC3E,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAO,IAAO,OAAA,aAAA,CAAc,cAAc,KAAK,CAAA,CAAA;AACjD,CAAA,CAAA;AAEA,MAAM,aAAA,GAAgB,CAAC,KAAA,EAAmB,KACxC,KAAA,KAAA,IAAS,MAAM,CAAC,CAAA,IAAK,KAAS,IAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AAEvC,MAAM,mBACJ,GAAA,WAAA,CAAY,IAAO,GAAA,WAAA,CAAY,QAAQ,WAAY,CAAA,IAAA,CAAA;AACrD,MAAM,2BAAA,GAA8B,WAAY,CAAA,IAAA,GAAO,WAAY,CAAA,KAAA,CAAA;AACnE,MAAM,0BAAA,GAA6B,WAAY,CAAA,IAAA,GAAO,WAAY,CAAA,IAAA,CAAA;AAOrD,MAAA,kBAAA,GAAqB,CAChC,QAAA,EACA,SACW,KAAA;AACX,EAAA,KAAA,MAAW,QAAQ,QAAU,EAAA;AAC3B,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,MAAA,IAAI,SAAS,SAAW,EAAA;AACtB,QAAO,OAAA,mBAAA,CAAA;AAAA,OACT;AAAA,KACS,MAAA,IAAA,aAAA,CAAc,IAAM,EAAA,SAAS,CAAG,EAAA;AACzC,MAAI,IAAA,SAAA,KAAc,IAAK,CAAA,CAAC,CAAG,EAAA;AACzB,QAAO,OAAA,2BAAA,CAAA;AAAA,OACE,MAAA,IAAA,SAAA,KAAc,IAAK,CAAA,CAAC,CAAG,EAAA;AAChC,QAAO,OAAA,0BAAA,CAAA;AAAA,OACF,MAAA;AACL,QAAA,OAAO,WAAY,CAAA,IAAA,CAAA;AAAA,OACrB;AAAA,KACF;AAAA,GACF;AACA,EAAA,OAAO,WAAY,CAAA,KAAA,CAAA;AACrB,EAAA;AAEa,MAAA,UAAA,GAAa,CAAC,QAAA,EAAqB,SAAsB,KAAA;AACpE,EAAA,KAAA,MAAW,QAAQ,QAAU,EAAA;AAC3B,IAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,MAAA,IAAI,SAAS,SAAW,EAAA;AACtB,QAAO,OAAA,IAAA,CAAA;AAAA,OACT,MAAA,IAAW,OAAO,SAAW,EAAA;AAC3B,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACS,MAAA,IAAA,aAAA,CAAc,IAAM,EAAA,SAAS,CAAG,EAAA;AACzC,MAAO,OAAA,IAAA,CAAA;AAAA,KACE,MAAA,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,SAAW,EAAA;AAC9B,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,GACF;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,EAAA;AAKa,MAAA,eAAA,GAAkB,CAAC,QAAkC,KAAA;AAChE,EAAA,IAAI,SAAS,KAAM,CAAA,CAAC,iBAAiB,OAAO,YAAA,KAAiB,QAAQ,CAAG,EAAA;AACtE,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AACA,EAAA,MAAM,mBAAmB,EAAC,CAAA;AAC1B,EAAA,KAAA,MAAW,gBAAgB,QAAU,EAAA;AACnC,IAAI,IAAA,OAAO,iBAAiB,QAAU,EAAA;AACpC,MAAA,gBAAA,CAAiB,KAAK,YAAY,CAAA,CAAA;AAAA,KAC7B,MAAA;AACL,MAAS,KAAA,IAAA,CAAA,GAAI,aAAa,CAAC,CAAA,EAAG,KAAK,YAAa,CAAA,CAAC,GAAG,CAAK,EAAA,EAAA;AACvD,QAAA,gBAAA,CAAiB,KAAK,CAAC,CAAA,CAAA;AAAA,OACzB;AAAA,KACF;AAAA,GACF;AACA,EAAO,OAAA,gBAAA,CAAA;AACT,EAAA;AAEA,SAAS,UAAW,CAAA,CAAC,IAAM,EAAA,EAAE,GAAe,SAA8B,EAAA;AACxE,EAAA,IAAI,cAAc,IAAM,EAAA;AACtB,IAAA,OAAO,CAAC,CAAC,IAAO,GAAA,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,GACxB,MAAA,IAAW,cAAc,EAAI,EAAA;AAC3B,IAAA,OAAO,CAAC,CAAC,IAAM,EAAA,EAAA,GAAK,CAAC,CAAC,CAAA,CAAA;AAAA,GACxB,MAAA,IAAW,EAAK,GAAA,IAAA,KAAS,CAAG,EAAA;AAC1B,IAAO,OAAA,CAAC,MAAM,EAAE,CAAA,CAAA;AAAA,GAClB,MAAA,IAAW,SAAc,KAAA,EAAA,GAAK,CAAG,EAAA;AAC/B,IAAA,OAAO,CAAC,CAAC,IAAA,EAAM,EAAK,GAAA,CAAC,GAAG,EAAE,CAAA,CAAA;AAAA,GACrB,MAAA;AACL,IAAO,OAAA;AAAA,MACL,CAAC,IAAM,EAAA,SAAA,GAAY,CAAC,CAAA;AAAA,MACpB,CAAC,SAAY,GAAA,CAAA,EAAG,EAAE,CAAA;AAAA,KACpB,CAAA;AAAA,GACF;AACF;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"selection-utils.js","sources":["../src/selection-utils.ts"],"sourcesContent":["import {\n DataSourceRow,\n RangeTuple,\n Selection,\n SelectionItem,\n} from \"@vuu-ui/vuu-data-types\";\nimport { TableSelectionModel } from \"@vuu-ui/vuu-table-types\";\nimport { metadataKeys } from \"./column-utils\";\n\nconst NO_SELECTION: number[] = [];\n\nconst { SELECTED } = metadataKeys;\n\nexport const RowSelected = {\n False: 0,\n True: 1,\n First: 2,\n Last: 4,\n};\n\nexport const isRowSelected = (row: DataSourceRow): boolean =>\n (row[SELECTED] & RowSelected.True) === RowSelected.True;\n\nexport const isRowSelectedLast = (row?: DataSourceRow): boolean =>\n row !== undefined && (row[SELECTED] & RowSelected.Last) === RowSelected.Last;\n\nconst inAscendingOrder = (item1: SelectionItem, item2: SelectionItem) => {\n const n1: number = typeof item1 === \"number\" ? item1 : item1[0];\n const n2: number = typeof item2 === \"number\" ? item2 : item2[0];\n return n1 - n2;\n};\n\nexport const deselectItem = (\n selectionModel: TableSelectionModel,\n selected: Selection,\n itemIndex: number,\n rangeSelect: boolean,\n keepExistingSelection = false\n): Selection => {\n const singleSelect = selectionModel === \"single\";\n const multiSelect =\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const actsLikeSingleSelect =\n singleSelect || (multiSelect && !keepExistingSelection && !rangeSelect);\n\n if (actsLikeSingleSelect || (!rangeSelect && !keepExistingSelection)) {\n return NO_SELECTION;\n } else if (!rangeSelect && keepExistingSelection) {\n return removeSelectedItem(selected, itemIndex);\n }\n return NO_SELECTION;\n};\n\nconst newSelectedFillsGapOrExtends = (\n selection: Selection,\n itemIndex: number\n): boolean => {\n for (let i = 0; i < selection.length; i++) {\n const item = selection[i];\n if (typeof item === \"number\") {\n if (item === itemIndex - 1) {\n return true;\n } else if (item > itemIndex) {\n return false;\n }\n } else if (item[0] === itemIndex + 1 || item[1] === itemIndex - 1) {\n return true;\n } else if (item[0] > itemIndex) {\n return false;\n }\n }\n return false;\n};\n\nconst fillGapOrExtendSelection = (\n selection: Selection,\n itemIndex: number\n): Selection => {\n for (let i = 0; i < selection.length; i++) {\n const item = selection[i];\n if (typeof item === \"number\") {\n if (item === itemIndex - 1) {\n const nextSelectionItem = selection[i + 1];\n if (nextSelectionItem === itemIndex + 1) {\n const newRange: SelectionItem = [item, nextSelectionItem];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else {\n const newRange: SelectionItem = [item, itemIndex];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n }\n } else if (item > itemIndex) {\n break;\n }\n } else if (item[0] === itemIndex + 1) {\n const newRange: SelectionItem = [itemIndex, item[1]];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n } else if (item[1] === itemIndex - 1) {\n // check to see whether another contiguous range follows\n const nextItem = selection[i + 1];\n if (Array.isArray(nextItem) && nextItem[0] === itemIndex + 1) {\n const newRange: SelectionItem = [item[0], nextItem[1]];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else if (typeof nextItem === \"number\" && nextItem === itemIndex + 1) {\n const newRange: SelectionItem = [item[0], nextItem];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else {\n const newRange: SelectionItem = [item[0], itemIndex];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n }\n }\n }\n\n return selection;\n};\n\nexport const selectItem = (\n selectionModel: TableSelectionModel,\n selected: Selection,\n itemIndex: number,\n rangeSelect: boolean,\n keepExistingSelection = false,\n activeItemIndex = -1\n): Selection => {\n const singleSelect = selectionModel === \"single\";\n const multiSelect =\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const actsLikeSingleSelect =\n singleSelect || (multiSelect && !keepExistingSelection && !rangeSelect);\n\n if (selectionModel === \"none\") {\n return NO_SELECTION;\n } else if (actsLikeSingleSelect) {\n return [itemIndex];\n } else if (rangeSelect) {\n if (selected.length === 0) {\n return [itemIndex];\n } else {\n const range: RangeTuple =\n itemIndex > activeItemIndex\n ? [activeItemIndex, itemIndex]\n : [itemIndex, activeItemIndex];\n return insertRange(selected, range);\n }\n } else if (!rangeSelect) {\n // what if we now have a range because we just filled agap between 2\n if (newSelectedFillsGapOrExtends(selected, itemIndex)) {\n return fillGapOrExtendSelection(selected, itemIndex);\n } else {\n return selected?.concat(itemIndex).sort(inAscendingOrder);\n }\n } else if (multiSelect) {\n // const [from, to] = idx > active ? [active, idx] : [idx, active];\n // newSelected = selected?.slice();\n // for (let i = from; i <= to; i++) {\n // if (!selected?.includes(i)) {\n // newSelected.push(i);\n // }\n // }\n }\n return NO_SELECTION;\n};\n\nfunction removeSelectedItem(selected: Selection, itemIndex: number) {\n if (selected.includes(itemIndex)) {\n return selected.filter((selectedItem) => selectedItem !== itemIndex);\n } else {\n const newSelected: Selection = [];\n for (const selectedItem of selected) {\n if (Array.isArray(selectedItem)) {\n if (rangeIncludes(selectedItem, itemIndex)) {\n newSelected.push(...splitRange(selectedItem, itemIndex));\n } else {\n newSelected.push(selectedItem);\n }\n } else {\n newSelected.push(selectedItem);\n }\n }\n return newSelected;\n }\n}\n\nfunction insertRange(selected: Selection, range: RangeTuple): Selection {\n const [from, to] = range;\n return selected.reduce<Selection>((newSelected, selectedItem) => {\n if (typeof selectedItem === \"number\") {\n if (selectedItem < from || selectedItem > to) {\n newSelected.push(selectedItem);\n } else if (!includedInRange(newSelected.at(-1), selectedItem)) {\n newSelected.push(range);\n }\n } else if (overlappingRange(selectedItem, range)) {\n newSelected.push(mergeRanges(selectedItem, range));\n } else {\n if (range[1] < selectedItem[0]) {\n newSelected.push(range);\n }\n newSelected.push(selectedItem);\n }\n\n return newSelected;\n }, []);\n}\n\nconst overlappingRange = (r1: RangeTuple, r2: RangeTuple) =>\n (r1[1] >= r2[0] && r1[1] <= r2[1]) || (r1[0] >= r2[0] && r1[0] <= r2[1]);\nconst mergeRanges = (r1: RangeTuple, r2: RangeTuple): RangeTuple => [\n Math.min(r1[0], r2[0]),\n Math.max(r1[1], r2[1]),\n];\n\nconst includedInRange = (\n selectedItem: SelectionItem | undefined,\n index: number\n) => {\n if (typeof selectedItem === \"undefined\" || typeof selectedItem === \"number\") {\n return false;\n } else return rangeIncludes(selectedItem, index);\n};\n\nconst rangeIncludes = (range: RangeTuple, index: number) =>\n index >= range[0] && index <= range[1];\n\nconst SINGLE_SELECTED_ROW =\n RowSelected.True + RowSelected.First + RowSelected.Last;\nconst FIRST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.First;\nconst LAST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.Last;\n\n/**\n * Determine the value for selected. We use a bitmap to represent a number of selection states\n * a row might exhibit. selected/not-selected is the fundamental value. We also identify first\n * row of a selected block, last row of a selected block;\n */\nexport const getSelectionStatus = (\n selected: Selection,\n itemIndex: number\n): number => {\n for (const item of selected) {\n if (typeof item === \"number\") {\n if (item === itemIndex) {\n return SINGLE_SELECTED_ROW;\n }\n } else if (rangeIncludes(item, itemIndex)) {\n if (itemIndex === item[0]) {\n return FIRST_SELECTED_ROW_OF_BLOCK;\n } else if (itemIndex === item[1]) {\n return LAST_SELECTED_ROW_OF_BLOCK;\n } else {\n return RowSelected.True;\n }\n }\n }\n return RowSelected.False;\n};\n\nexport const isSelected = (selected: Selection, itemIndex: number) => {\n for (const item of selected) {\n if (typeof item === \"number\") {\n if (item === itemIndex) {\n return true;\n } else if (item > itemIndex) {\n return false;\n }\n } else if (rangeIncludes(item, itemIndex)) {\n return true;\n } else if (item[0] > itemIndex) {\n return false;\n }\n }\n\n return false;\n};\n/**\n * Vuu server expects a full list if indexes of selected rows. Client represents selection in a more\n * efficient structure. This converts client structure to full server format.\n */\nexport const expandSelection = (selected: Selection): number[] => {\n if (selected.every((selectedItem) => typeof selectedItem === \"number\")) {\n return selected as number[];\n }\n const expandedSelected = [];\n for (const selectedItem of selected) {\n if (typeof selectedItem === \"number\") {\n expandedSelected.push(selectedItem);\n } else {\n for (let i = selectedItem[0]; i <= selectedItem[1]; i++) {\n expandedSelected.push(i);\n }\n }\n }\n return expandedSelected;\n};\n\nfunction splitRange([from, to]: RangeTuple, itemIndex: number): Selection {\n if (itemIndex === from) {\n return [[from + 1, to]];\n } else if (itemIndex === to) {\n return [[from, to - 1]];\n } else if (to - from === 2) {\n return [from, to];\n } else if (itemIndex === to - 1) {\n return [[from, to - 2], to];\n } else {\n return [\n [from, itemIndex - 1],\n [itemIndex + 1, to],\n ];\n }\n}\n\nexport type SelectionDiff = {\n added: SelectionItem[];\n removed: SelectionItem[];\n};\n"],"names":["metadataKeys"],"mappings":"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"}
|
package/esm/datasource-utils.js
CHANGED
|
@@ -130,7 +130,7 @@ const isConnectionQualityMetrics = (msg) => msg.type === "connection-metrics";
|
|
|
130
130
|
const messageHasResult = (msg) => typeof msg.result !== "undefined";
|
|
131
131
|
const isErrorResponse = (response) => response !== void 0 && "error" in response;
|
|
132
132
|
const hasAction = (response) => response != void 0 && "action" in response;
|
|
133
|
-
const
|
|
133
|
+
const isViewportMessage = (msg) => "viewport" in msg;
|
|
134
134
|
const withConfigDefaults = (config) => {
|
|
135
135
|
if (config.aggregations && config.columns && config.filter && config.groupBy && config.sort) {
|
|
136
136
|
return config;
|
|
@@ -154,5 +154,5 @@ const withConfigDefaults = (config) => {
|
|
|
154
154
|
}
|
|
155
155
|
};
|
|
156
156
|
|
|
157
|
-
export { NO_CONFIG_CHANGES, NoFilter, NoSort, hasAction, hasFilter, hasGroupBy, hasSort, isConfigChanged, isConnectionQualityMetrics, isConnectionStatusMessage, isErrorResponse, isFilterChanged, isGroupByChanged, isTableSchema, isTypeaheadSuggestionProvider,
|
|
157
|
+
export { NO_CONFIG_CHANGES, NoFilter, NoSort, hasAction, hasFilter, hasGroupBy, hasSort, isConfigChanged, isConnectionQualityMetrics, isConnectionStatusMessage, isErrorResponse, isFilterChanged, isGroupByChanged, isTableSchema, isTypeaheadSuggestionProvider, isViewportMessage, messageHasResult, vanillaConfig, withConfigDefaults };
|
|
158
158
|
//# sourceMappingURL=datasource-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource-utils.js","sources":["../src/datasource-utils.ts"],"sourcesContent":["import {\n ConnectionQualityMetrics,\n ConnectionStatusMessage,\n DataSourceConfig,\n MenuRpcResponse,\n RpcResponse,\n TypeaheadSuggestionProvider,\n VuuUIMessageIn,\n VuuUIMessageInRPC,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n VuuUIMessageInTableMeta,\n VuuUIMessageOutViewport,\n WithFilter,\n WithFullConfig,\n WithGroupBy,\n WithSort,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n LinkDescriptorWithLabel,\n VuuFilter,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nexport const NoFilter: VuuFilter = { filter: \"\" };\nexport const NoSort: VuuSort = { sortDefs: [] };\n\nexport const vanillaConfig: WithFullConfig = {\n aggregations: [],\n columns: [],\n filter: NoFilter,\n groupBy: [],\n sort: NoSort,\n};\n\nexport type DataSourceConfigChanges = {\n aggregationsChanged: boolean;\n columnsChanged: boolean;\n filterChanged: boolean;\n groupByChanged: boolean;\n sortChanged: boolean;\n visualLinkChanged: boolean;\n};\n\nexport type MaybeDataSourceConfigChanges = DataSourceConfigChanges & {\n noChanges: boolean;\n};\n\ntype DataConfigPredicate = (\n config: DataSourceConfig,\n newConfig: DataSourceConfig\n) => boolean;\n\nconst equivalentAggregations: DataConfigPredicate = (\n { aggregations: agg1 },\n { aggregations: agg2 }\n) =>\n (agg1 === undefined && agg2?.length === 0) ||\n (agg2 === undefined && agg1?.length === 0);\n\nconst equivalentColumns: DataConfigPredicate = (\n { columns: cols1 },\n { columns: cols2 }\n) =>\n (cols1 === undefined && cols2?.length === 0) ||\n (cols2 === undefined && cols1?.length === 0);\n\nconst equivalentFilter: DataConfigPredicate = (\n { filter: f1 },\n { filter: f2 }\n) =>\n (f1 === undefined && f2?.filter === \"\") ||\n (f2 === undefined && f1?.filter === \"\");\n\nconst equivalentGroupBy: DataConfigPredicate = (\n { groupBy: val1 },\n { groupBy: val2 }\n) =>\n (val1 === undefined && val2?.length === 0) ||\n (val2 === undefined && val1?.length === 0);\n\nconst equivalentSort: DataConfigPredicate = ({ sort: s1 }, { sort: s2 }) =>\n (s1 === undefined && s2?.sortDefs.length === 0) ||\n (s2 === undefined && s1?.sortDefs.length === 0);\n\nconst exactlyTheSame = (a: unknown, b: unknown) => {\n if (a === b) {\n return true;\n } else if (a === undefined && b === undefined) {\n return true;\n } else {\n return false;\n }\n};\n\nconst isAggregationsChanged: DataConfigPredicate = (config, newConfig) => {\n const { aggregations: agg1 } = config;\n const { aggregations: agg2 } = newConfig;\n if (exactlyTheSame(agg1, agg2) || equivalentAggregations(config, newConfig)) {\n return false;\n } else if (agg1 === undefined || agg2 === undefined) {\n return true;\n } else if (agg1.length !== agg2.length) {\n return true;\n }\n return agg1.some(\n ({ column, aggType }, i) =>\n column !== agg2[i].column || aggType !== agg2[i].aggType\n );\n};\n\nconst isColumnsChanged: DataConfigPredicate = (config, newConfig) => {\n const { columns: cols1 } = config;\n const { columns: cols2 } = newConfig;\n\n if (exactlyTheSame(cols1, cols2) || equivalentColumns(config, newConfig)) {\n return false;\n } else if (cols1 === undefined || cols2 === undefined) {\n return true;\n } else if (cols1?.length !== cols2?.length) {\n return true;\n }\n return cols1.some((column, i) => column !== cols2?.[i]);\n};\n\nexport const isFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.filter?.filter !== c2.filter?.filter;\n }\n};\n\nexport const isGroupByChanged: DataConfigPredicate = (config, newConfig) => {\n const { groupBy: g1 } = config;\n const { groupBy: g2 } = newConfig;\n if (exactlyTheSame(g1, g2) || equivalentGroupBy(config, newConfig)) {\n return false;\n } else if (g1 === undefined || g2 === undefined) {\n return true;\n } else if (g1?.length !== g2?.length) {\n return true;\n }\n return g1.some((column, i) => column !== g2?.[i]);\n};\n\nconst isSortChanged: DataConfigPredicate = (config, newConfig) => {\n const { sort: s1 } = config;\n const { sort: s2 } = newConfig;\n if (exactlyTheSame(s1, s2) || equivalentSort(config, newConfig)) {\n return false;\n } else if (s1 === undefined || s2 === undefined) {\n return true;\n } else if (s1?.sortDefs.length !== s2?.sortDefs.length) {\n return true;\n }\n return s1.sortDefs.some(\n ({ column, sortType }, i) =>\n column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType\n );\n};\n\nconst isVisualLinkChanged: DataConfigPredicate = () => {\n // TODO\n return false;\n};\n\nexport const NO_CONFIG_CHANGES: MaybeDataSourceConfigChanges = {\n aggregationsChanged: false,\n columnsChanged: false,\n filterChanged: false,\n groupByChanged: false,\n noChanges: true,\n sortChanged: false,\n visualLinkChanged: false,\n};\n\nexport const isConfigChanged = (\n config: DataSourceConfig | undefined,\n newConfig: DataSourceConfig | undefined\n): MaybeDataSourceConfigChanges => {\n if (exactlyTheSame(config, newConfig)) {\n return NO_CONFIG_CHANGES;\n }\n\n if (config === undefined && newConfig == undefined) {\n return NO_CONFIG_CHANGES;\n } else if (config === undefined) {\n return isConfigChanged({}, newConfig);\n } else if (newConfig === undefined) {\n return isConfigChanged(config, {});\n }\n\n const aggregationsChanged = isAggregationsChanged(config, newConfig);\n const columnsChanged = isColumnsChanged(config, newConfig);\n const filterChanged = isFilterChanged(config, newConfig);\n const groupByChanged = isGroupByChanged(config, newConfig);\n const sortChanged = isSortChanged(config, newConfig);\n const visualLinkChanged = isVisualLinkChanged(config, newConfig);\n\n const noChanges = !(\n aggregationsChanged ||\n columnsChanged ||\n filterChanged ||\n groupByChanged ||\n sortChanged ||\n visualLinkChanged\n );\n\n return {\n aggregationsChanged,\n columnsChanged,\n filterChanged,\n groupByChanged,\n noChanges,\n sortChanged,\n visualLinkChanged,\n };\n};\n\nexport const hasGroupBy = (config?: DataSourceConfig): config is WithGroupBy =>\n config !== undefined &&\n config.groupBy !== undefined &&\n config.groupBy.length > 0;\n\nexport const hasFilter = (config?: DataSourceConfig): config is WithFilter =>\n config?.filter !== undefined && config.filter.filter.length > 0;\n\nexport const hasSort = (config?: DataSourceConfig): config is WithSort =>\n config?.sort !== undefined &&\n Array.isArray(config.sort?.sortDefs) &&\n config.sort.sortDefs.length > 0;\n\nexport const isTypeaheadSuggestionProvider = (\n source: unknown\n): source is TypeaheadSuggestionProvider =>\n typeof (source as TypeaheadSuggestionProvider)[\"getTypeaheadSuggestions\"] ===\n \"function\";\n\nexport const isTableSchema = (\n message: VuuUIMessageIn\n): message is VuuUIMessageInTableMeta => message.type === \"TABLE_META_RESP\";\n\nexport const isConnectionStatusMessage = (\n msg: object | ConnectionStatusMessage\n): msg is ConnectionStatusMessage =>\n (msg as ConnectionStatusMessage).type === \"connection-status\";\n\nexport const isConnectionQualityMetrics = (\n msg: object\n): msg is ConnectionQualityMetrics =>\n (msg as ConnectionQualityMetrics).type === \"connection-metrics\";\n\nexport const messageHasResult = (msg: object): msg is VuuUIMessageInRPC =>\n typeof (msg as VuuUIMessageInRPC).result !== \"undefined\";\n\nexport const isErrorResponse = (\n response?: RpcResponse\n): response is VuuUIMessageInRPCEditReject =>\n response !== undefined && \"error\" in response;\n\nexport const hasAction = (\n response?: RpcResponse\n): response is MenuRpcResponse | VuuUIMessageInRPCEditResponse =>\n response != undefined && \"action\" in response;\n\nexport const isViewporttMessage = (\n msg: object\n): msg is VuuUIMessageOutViewport => \"viewport\" in msg;\n\nexport const withConfigDefaults = (\n config: DataSourceConfig\n): WithFullConfig & { visualLink?: LinkDescriptorWithLabel } => {\n if (\n config.aggregations &&\n config.columns &&\n config.filter &&\n config.groupBy &&\n config.sort\n ) {\n return config as WithFullConfig;\n } else {\n const {\n aggregations = [],\n columns = [],\n filter = { filter: \"\" },\n groupBy = [],\n sort = { sortDefs: [] },\n visualLink,\n } = config;\n\n return {\n aggregations,\n columns,\n filter,\n groupBy,\n sort,\n visualLink,\n };\n }\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"datasource-utils.js","sources":["../src/datasource-utils.ts"],"sourcesContent":["import {\n ConnectionQualityMetrics,\n ConnectionStatusMessage,\n DataSourceConfig,\n MenuRpcResponse,\n RpcResponse,\n TypeaheadSuggestionProvider,\n VuuUIMessageIn,\n VuuUIMessageInRPC,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n VuuUIMessageInTableMeta,\n VuuUIMessageOutViewport,\n WithFilter,\n WithFullConfig,\n WithGroupBy,\n WithSort,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n LinkDescriptorWithLabel,\n VuuFilter,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nexport const NoFilter: VuuFilter = { filter: \"\" };\nexport const NoSort: VuuSort = { sortDefs: [] };\n\nexport const vanillaConfig: WithFullConfig = {\n aggregations: [],\n columns: [],\n filter: NoFilter,\n groupBy: [],\n sort: NoSort,\n};\n\nexport type DataSourceConfigChanges = {\n aggregationsChanged: boolean;\n columnsChanged: boolean;\n filterChanged: boolean;\n groupByChanged: boolean;\n sortChanged: boolean;\n visualLinkChanged: boolean;\n};\n\nexport type MaybeDataSourceConfigChanges = DataSourceConfigChanges & {\n noChanges: boolean;\n};\n\ntype DataConfigPredicate = (\n config: DataSourceConfig,\n newConfig: DataSourceConfig\n) => boolean;\n\nconst equivalentAggregations: DataConfigPredicate = (\n { aggregations: agg1 },\n { aggregations: agg2 }\n) =>\n (agg1 === undefined && agg2?.length === 0) ||\n (agg2 === undefined && agg1?.length === 0);\n\nconst equivalentColumns: DataConfigPredicate = (\n { columns: cols1 },\n { columns: cols2 }\n) =>\n (cols1 === undefined && cols2?.length === 0) ||\n (cols2 === undefined && cols1?.length === 0);\n\nconst equivalentFilter: DataConfigPredicate = (\n { filter: f1 },\n { filter: f2 }\n) =>\n (f1 === undefined && f2?.filter === \"\") ||\n (f2 === undefined && f1?.filter === \"\");\n\nconst equivalentGroupBy: DataConfigPredicate = (\n { groupBy: val1 },\n { groupBy: val2 }\n) =>\n (val1 === undefined && val2?.length === 0) ||\n (val2 === undefined && val1?.length === 0);\n\nconst equivalentSort: DataConfigPredicate = ({ sort: s1 }, { sort: s2 }) =>\n (s1 === undefined && s2?.sortDefs.length === 0) ||\n (s2 === undefined && s1?.sortDefs.length === 0);\n\nconst exactlyTheSame = (a: unknown, b: unknown) => {\n if (a === b) {\n return true;\n } else if (a === undefined && b === undefined) {\n return true;\n } else {\n return false;\n }\n};\n\nconst isAggregationsChanged: DataConfigPredicate = (config, newConfig) => {\n const { aggregations: agg1 } = config;\n const { aggregations: agg2 } = newConfig;\n if (exactlyTheSame(agg1, agg2) || equivalentAggregations(config, newConfig)) {\n return false;\n } else if (agg1 === undefined || agg2 === undefined) {\n return true;\n } else if (agg1.length !== agg2.length) {\n return true;\n }\n return agg1.some(\n ({ column, aggType }, i) =>\n column !== agg2[i].column || aggType !== agg2[i].aggType\n );\n};\n\nconst isColumnsChanged: DataConfigPredicate = (config, newConfig) => {\n const { columns: cols1 } = config;\n const { columns: cols2 } = newConfig;\n\n if (exactlyTheSame(cols1, cols2) || equivalentColumns(config, newConfig)) {\n return false;\n } else if (cols1 === undefined || cols2 === undefined) {\n return true;\n } else if (cols1?.length !== cols2?.length) {\n return true;\n }\n return cols1.some((column, i) => column !== cols2?.[i]);\n};\n\nexport const isFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.filter?.filter !== c2.filter?.filter;\n }\n};\n\nexport const isGroupByChanged: DataConfigPredicate = (config, newConfig) => {\n const { groupBy: g1 } = config;\n const { groupBy: g2 } = newConfig;\n if (exactlyTheSame(g1, g2) || equivalentGroupBy(config, newConfig)) {\n return false;\n } else if (g1 === undefined || g2 === undefined) {\n return true;\n } else if (g1?.length !== g2?.length) {\n return true;\n }\n return g1.some((column, i) => column !== g2?.[i]);\n};\n\nconst isSortChanged: DataConfigPredicate = (config, newConfig) => {\n const { sort: s1 } = config;\n const { sort: s2 } = newConfig;\n if (exactlyTheSame(s1, s2) || equivalentSort(config, newConfig)) {\n return false;\n } else if (s1 === undefined || s2 === undefined) {\n return true;\n } else if (s1?.sortDefs.length !== s2?.sortDefs.length) {\n return true;\n }\n return s1.sortDefs.some(\n ({ column, sortType }, i) =>\n column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType\n );\n};\n\nconst isVisualLinkChanged: DataConfigPredicate = () => {\n // TODO\n return false;\n};\n\nexport const NO_CONFIG_CHANGES: MaybeDataSourceConfigChanges = {\n aggregationsChanged: false,\n columnsChanged: false,\n filterChanged: false,\n groupByChanged: false,\n noChanges: true,\n sortChanged: false,\n visualLinkChanged: false,\n};\n\nexport const isConfigChanged = (\n config: DataSourceConfig | undefined,\n newConfig: DataSourceConfig | undefined\n): MaybeDataSourceConfigChanges => {\n if (exactlyTheSame(config, newConfig)) {\n return NO_CONFIG_CHANGES;\n }\n\n if (config === undefined && newConfig == undefined) {\n return NO_CONFIG_CHANGES;\n } else if (config === undefined) {\n return isConfigChanged({}, newConfig);\n } else if (newConfig === undefined) {\n return isConfigChanged(config, {});\n }\n\n const aggregationsChanged = isAggregationsChanged(config, newConfig);\n const columnsChanged = isColumnsChanged(config, newConfig);\n const filterChanged = isFilterChanged(config, newConfig);\n const groupByChanged = isGroupByChanged(config, newConfig);\n const sortChanged = isSortChanged(config, newConfig);\n const visualLinkChanged = isVisualLinkChanged(config, newConfig);\n\n const noChanges = !(\n aggregationsChanged ||\n columnsChanged ||\n filterChanged ||\n groupByChanged ||\n sortChanged ||\n visualLinkChanged\n );\n\n return {\n aggregationsChanged,\n columnsChanged,\n filterChanged,\n groupByChanged,\n noChanges,\n sortChanged,\n visualLinkChanged,\n };\n};\n\nexport const hasGroupBy = (config?: DataSourceConfig): config is WithGroupBy =>\n config !== undefined &&\n config.groupBy !== undefined &&\n config.groupBy.length > 0;\n\nexport const hasFilter = (config?: DataSourceConfig): config is WithFilter =>\n config?.filter !== undefined && config.filter.filter.length > 0;\n\nexport const hasSort = (config?: DataSourceConfig): config is WithSort =>\n config?.sort !== undefined &&\n Array.isArray(config.sort?.sortDefs) &&\n config.sort.sortDefs.length > 0;\n\nexport const isTypeaheadSuggestionProvider = (\n source: unknown\n): source is TypeaheadSuggestionProvider =>\n typeof (source as TypeaheadSuggestionProvider)[\"getTypeaheadSuggestions\"] ===\n \"function\";\n\nexport const isTableSchema = (\n message: VuuUIMessageIn\n): message is VuuUIMessageInTableMeta => message.type === \"TABLE_META_RESP\";\n\nexport const isConnectionStatusMessage = (\n msg: object | ConnectionStatusMessage\n): msg is ConnectionStatusMessage =>\n (msg as ConnectionStatusMessage).type === \"connection-status\";\n\nexport const isConnectionQualityMetrics = (\n msg: object\n): msg is ConnectionQualityMetrics =>\n (msg as ConnectionQualityMetrics).type === \"connection-metrics\";\n\nexport const messageHasResult = (msg: object): msg is VuuUIMessageInRPC =>\n typeof (msg as VuuUIMessageInRPC).result !== \"undefined\";\n\nexport const isErrorResponse = (\n response?: RpcResponse\n): response is VuuUIMessageInRPCEditReject =>\n response !== undefined && \"error\" in response;\n\nexport const hasAction = (\n response?: RpcResponse\n): response is MenuRpcResponse | VuuUIMessageInRPCEditResponse =>\n response != undefined && \"action\" in response;\n\nexport const isViewportMessage = (\n msg: object\n): msg is VuuUIMessageOutViewport => \"viewport\" in msg;\n\nexport const withConfigDefaults = (\n config: DataSourceConfig\n): WithFullConfig & { visualLink?: LinkDescriptorWithLabel } => {\n if (\n config.aggregations &&\n config.columns &&\n config.filter &&\n config.groupBy &&\n config.sort\n ) {\n return config as WithFullConfig;\n } else {\n const {\n aggregations = [],\n columns = [],\n filter = { filter: \"\" },\n groupBy = [],\n sort = { sortDefs: [] },\n visualLink,\n } = config;\n\n return {\n aggregations,\n columns,\n filter,\n groupBy,\n sort,\n visualLink,\n };\n }\n};\n"],"names":[],"mappings":"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"}
|
package/esm/index.js
CHANGED
|
@@ -8,7 +8,7 @@ export { MEASURES } from './common-types.js';
|
|
|
8
8
|
export { importCSS } from './css-utils.js';
|
|
9
9
|
export { DOWN1, DOWN2, UP1, UP2, getMovingValueDirection, isValidNumber, shallowEquals } from './data-utils.js';
|
|
10
10
|
export { isViewportMenusAction, isVisualLinkCreatedAction, isVisualLinkRemovedAction, isVisualLinksAction, isVuuFeatureAction } from './datasource-action-utils.js';
|
|
11
|
-
export { NO_CONFIG_CHANGES, NoFilter, NoSort, hasAction, hasFilter, hasGroupBy, hasSort, isConfigChanged, isConnectionQualityMetrics, isConnectionStatusMessage, isErrorResponse, isFilterChanged, isGroupByChanged, isTableSchema, isTypeaheadSuggestionProvider,
|
|
11
|
+
export { NO_CONFIG_CHANGES, NoFilter, NoSort, hasAction, hasFilter, hasGroupBy, hasSort, isConfigChanged, isConnectionQualityMetrics, isConnectionStatusMessage, isErrorResponse, isFilterChanged, isGroupByChanged, isTableSchema, isTypeaheadSuggestionProvider, isViewportMessage, messageHasResult, vanillaConfig, withConfigDefaults } from './datasource-utils.js';
|
|
12
12
|
export { formatDate, getDateFormatter } from './date/formatter.js';
|
|
13
13
|
export { isDateTimePattern, supportedDateTimePatterns } from './date/types.js';
|
|
14
14
|
export { toCalendarDate } from './date/utils.js';
|
|
@@ -35,6 +35,7 @@ export { uuid } from './nanoid/index.js';
|
|
|
35
35
|
export { asReactElements } from './react-utils.js';
|
|
36
36
|
export { roundDecimal } from './round-decimal.js';
|
|
37
37
|
export { debounce, throttle } from './perf-utils.js';
|
|
38
|
+
export { isOpenDialogAction, isOpenSessionTableDialogMessage, isVuuMenuRpcRequest } from './protocol-message-utils.js';
|
|
38
39
|
export { NULL_RANGE, WindowRange, getFullRange, rangeNewItems, rangesAreSame, resetRange, withinRange } from './range-utils.js';
|
|
39
40
|
export { actualRowPositioning, asDataSourceRowObject, getIndexFromRowElement, getRowElementAtIndex, virtualRowPositioning } from './row-utils.js';
|
|
40
41
|
export { RowSelected, deselectItem, expandSelection, getSelectionStatus, isRowSelected, isRowSelectedLast, isSelected, selectItem } from './selection-utils.js';
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const MENU_RPC_TYPES = [
|
|
2
|
+
"VIEW_PORT_MENUS_SELECT_RPC",
|
|
3
|
+
"VIEW_PORT_MENU_TABLE_RPC",
|
|
4
|
+
"VIEW_PORT_MENU_ROW_RPC",
|
|
5
|
+
"VIEW_PORT_MENU_CELL_RPC",
|
|
6
|
+
"VP_EDIT_CELL_RPC",
|
|
7
|
+
"VP_EDIT_ROW_RPC",
|
|
8
|
+
"VP_EDIT_ADD_ROW_RPC",
|
|
9
|
+
"VP_EDIT_DELETE_CELL_RPC",
|
|
10
|
+
"VP_EDIT_DELETE_ROW_RPC",
|
|
11
|
+
"VP_EDIT_SUBMIT_FORM_RPC"
|
|
12
|
+
];
|
|
13
|
+
const isVuuMenuRpcRequest = (message) => MENU_RPC_TYPES.includes(message["type"]);
|
|
14
|
+
const isOpenSessionTableDialogMessage = (rpcResponse) => rpcResponse.type === "VIEW_PORT_MENU_RESP" && isOpenDialogAction(rpcResponse.action) && rpcResponse.action.tableSchema !== void 0;
|
|
15
|
+
const isOpenDialogAction = (action) => action !== void 0 && action.type === "OPEN_DIALOG_ACTION";
|
|
16
|
+
|
|
17
|
+
export { isOpenDialogAction, isOpenSessionTableDialogMessage, isVuuMenuRpcRequest };
|
|
18
|
+
//# sourceMappingURL=protocol-message-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol-message-utils.js","sources":["../src/protocol-message-utils.ts"],"sourcesContent":["import {\n MenuRpcAction,\n MenuRpcResponse,\n OpenDialogAction,\n RpcResponse,\n VuuUIMessageOut,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n ClientToServerMenuRPC,\n VuuRpcRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nconst MENU_RPC_TYPES = [\n \"VIEW_PORT_MENUS_SELECT_RPC\",\n \"VIEW_PORT_MENU_TABLE_RPC\",\n \"VIEW_PORT_MENU_ROW_RPC\",\n \"VIEW_PORT_MENU_CELL_RPC\",\n \"VP_EDIT_CELL_RPC\",\n \"VP_EDIT_ROW_RPC\",\n \"VP_EDIT_ADD_ROW_RPC\",\n \"VP_EDIT_DELETE_CELL_RPC\",\n \"VP_EDIT_DELETE_ROW_RPC\",\n \"VP_EDIT_SUBMIT_FORM_RPC\",\n];\n\nexport const isVuuMenuRpcRequest = (\n message: VuuUIMessageOut | VuuRpcRequest | ClientToServerMenuRPC\n): message is ClientToServerMenuRPC => MENU_RPC_TYPES.includes(message[\"type\"]);\n\nexport const isOpenSessionTableDialogMessage = (\n rpcResponse: RpcResponse\n): rpcResponse is MenuRpcResponse<OpenDialogAction> =>\n rpcResponse.type === \"VIEW_PORT_MENU_RESP\" &&\n isOpenDialogAction(rpcResponse.action) &&\n rpcResponse.action.tableSchema !== undefined;\n\nexport const isOpenDialogAction = (\n action?: MenuRpcAction\n): action is OpenDialogAction =>\n action !== undefined && action.type === \"OPEN_DIALOG_ACTION\";\n"],"names":[],"mappings":"AAYA,MAAM,cAAiB,GAAA;AAAA,EACrB,4BAAA;AAAA,EACA,0BAAA;AAAA,EACA,wBAAA;AAAA,EACA,yBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wBAAA;AAAA,EACA,yBAAA;AACF,CAAA,CAAA;AAEO,MAAM,sBAAsB,CACjC,OAAA,KACqC,eAAe,QAAS,CAAA,OAAA,CAAQ,MAAM,CAAC,EAAA;AAEvE,MAAM,+BAAkC,GAAA,CAC7C,WAEA,KAAA,WAAA,CAAY,IAAS,KAAA,qBAAA,IACrB,kBAAmB,CAAA,WAAA,CAAY,MAAM,CAAA,IACrC,WAAY,CAAA,MAAA,CAAO,WAAgB,KAAA,KAAA,EAAA;AAE9B,MAAM,qBAAqB,CAChC,MAAA,KAEA,MAAW,KAAA,KAAA,CAAA,IAAa,OAAO,IAAS,KAAA;;;;"}
|
package/esm/row-utils.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { metadataKeys } from './column-utils.js';
|
|
2
|
+
import { isRowSelected } from './selection-utils.js';
|
|
2
3
|
|
|
3
|
-
const { IS_LEAF, KEY, IDX
|
|
4
|
+
const { IS_LEAF, KEY, IDX } = metadataKeys;
|
|
4
5
|
const actualRowPositioning = (rowHeight) => [
|
|
5
6
|
(row) => row[IDX] * rowHeight,
|
|
6
7
|
(position) => Math.floor(position / rowHeight),
|
|
@@ -54,18 +55,12 @@ const getIndexFromRowElement = (rowElement) => {
|
|
|
54
55
|
}
|
|
55
56
|
};
|
|
56
57
|
const asDataSourceRowObject = (row, columnMap) => {
|
|
57
|
-
|
|
58
|
-
const {
|
|
59
|
-
[IS_LEAF]: isLeaf,
|
|
60
|
-
[KEY]: key,
|
|
61
|
-
[IDX]: index,
|
|
62
|
-
[SELECTED]: selected
|
|
63
|
-
} = row;
|
|
58
|
+
const { [IS_LEAF]: isLeaf, [KEY]: key, [IDX]: index } = row;
|
|
64
59
|
const rowObject = {
|
|
65
60
|
key,
|
|
66
61
|
index,
|
|
67
62
|
isGroupRow: !isLeaf,
|
|
68
|
-
isSelected:
|
|
63
|
+
isSelected: isRowSelected(row),
|
|
69
64
|
data: {}
|
|
70
65
|
};
|
|
71
66
|
for (const [colName, colIdx] of Object.entries(columnMap)) {
|
package/esm/row-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"row-utils.js","sources":["../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 type { MutableRefObject } from \"react\";\nimport { ColumnMap, metadataKeys } from \"./column-utils\";\n\nconst { IS_LEAF, KEY, IDX
|
|
1
|
+
{"version":3,"file":"row-utils.js","sources":["../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 type { MutableRefObject } from \"react\";\nimport { ColumnMap, metadataKeys } from \"./column-utils\";\nimport { isRowSelected } from \"./selection-utils\";\n\nconst { IS_LEAF, KEY, IDX } = metadataKeys;\n\nexport type RowOffsetFunc = (\n row: DataSourceRow,\n pctScrollTop?: number\n) => 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 (row) => row[IDX] * 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: MutableRefObject<number>\n): RowPositioning => [\n (row, offset = 0) => {\n const rowOffset = pctScrollTop.current * virtualisedExtent;\n return (row[IDX] - 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\nexport const getRowElementAtIndex = (\n container: HTMLDivElement | EventTarget,\n rowIndex: number\n) => {\n if (rowIndex === -1) {\n return null;\n } else {\n const activeRow = (container as HTMLElement).querySelector(\n `[aria-rowindex=\"${rowIndex + 1}\"]`\n ) as HTMLElement;\n\n if (activeRow) {\n return activeRow;\n } else {\n throw Error(\n `getRowElementAtIndex no row found for index index ${rowIndex}`\n );\n }\n }\n};\n\nexport const getIndexFromRowElement = (rowElement: HTMLElement) => {\n const rowIndex = rowElement.ariaRowIndex;\n if (rowIndex != null) {\n const index = parseInt(rowIndex) - 1;\n if (!isNaN(index)) {\n return index;\n } else {\n throw Error(\n `getIndexFromRowElement row element aria rowindex invalid ${rowIndex}`\n );\n }\n } else {\n throw Error(\n \"getIndexFromRowElement row element does not have aria rowindex\"\n );\n }\n};\n\nexport const asDataSourceRowObject = (\n row: DataSourceRow,\n columnMap: 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: isRowSelected(row),\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"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection-utils.js","sources":["../src/selection-utils.ts"],"sourcesContent":["import {\n DataSourceRow,\n RangeTuple,\n Selection,\n SelectionItem,\n} from \"@vuu-ui/vuu-data-types\";\nimport { TableSelectionModel } from \"@vuu-ui/vuu-table-types\";\nimport { metadataKeys } from \"./column-utils\";\n\nconst NO_SELECTION: number[] = [];\n\nconst { SELECTED } = metadataKeys;\n\nexport const RowSelected = {\n False: 0,\n True: 1,\n First: 2,\n Last: 4,\n};\n\nexport const isRowSelected = (row: DataSourceRow): boolean =>\n (row[SELECTED] & RowSelected.True) === RowSelected.True;\nexport const isRowSelectedLast = (row?: DataSourceRow): boolean =>\n row !== undefined && (row[SELECTED] & RowSelected.Last) === RowSelected.Last;\n\nconst inAscendingOrder = (item1: SelectionItem, item2: SelectionItem) => {\n const n1: number = typeof item1 === \"number\" ? item1 : item1[0];\n const n2: number = typeof item2 === \"number\" ? item2 : item2[0];\n return n1 - n2;\n};\n\nexport const deselectItem = (\n selectionModel: TableSelectionModel,\n selected: Selection,\n itemIndex: number,\n rangeSelect: boolean,\n keepExistingSelection = false\n): Selection => {\n const singleSelect = selectionModel === \"single\";\n const multiSelect =\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const actsLikeSingleSelect =\n singleSelect || (multiSelect && !keepExistingSelection && !rangeSelect);\n\n if (actsLikeSingleSelect || (!rangeSelect && !keepExistingSelection)) {\n return NO_SELECTION;\n } else if (!rangeSelect && keepExistingSelection) {\n return removeSelectedItem(selected, itemIndex);\n }\n return NO_SELECTION;\n};\n\nconst newSelectedFillsGapOrExtends = (\n selection: Selection,\n itemIndex: number\n): boolean => {\n for (let i = 0; i < selection.length; i++) {\n const item = selection[i];\n if (typeof item === \"number\") {\n if (item === itemIndex - 1) {\n return true;\n } else if (item > itemIndex) {\n return false;\n }\n } else if (item[0] === itemIndex + 1 || item[1] === itemIndex - 1) {\n return true;\n } else if (item[0] > itemIndex) {\n return false;\n }\n }\n return false;\n};\n\nconst fillGapOrExtendSelection = (\n selection: Selection,\n itemIndex: number\n): Selection => {\n for (let i = 0; i < selection.length; i++) {\n const item = selection[i];\n if (typeof item === \"number\") {\n if (item === itemIndex - 1) {\n const nextSelectionItem = selection[i + 1];\n if (nextSelectionItem === itemIndex + 1) {\n const newRange: SelectionItem = [item, nextSelectionItem];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else {\n const newRange: SelectionItem = [item, itemIndex];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n }\n } else if (item > itemIndex) {\n break;\n }\n } else if (item[0] === itemIndex + 1) {\n const newRange: SelectionItem = [itemIndex, item[1]];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n } else if (item[1] === itemIndex - 1) {\n // check to see whether another contiguous range follows\n const nextItem = selection[i + 1];\n if (Array.isArray(nextItem) && nextItem[0] === itemIndex + 1) {\n const newRange: SelectionItem = [item[0], nextItem[1]];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else if (typeof nextItem === \"number\" && nextItem === itemIndex + 1) {\n const newRange: SelectionItem = [item[0], nextItem];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else {\n const newRange: SelectionItem = [item[0], itemIndex];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n }\n }\n }\n\n return selection;\n};\n\nexport const selectItem = (\n selectionModel: TableSelectionModel,\n selected: Selection,\n itemIndex: number,\n rangeSelect: boolean,\n keepExistingSelection = false,\n activeItemIndex = -1\n): Selection => {\n const singleSelect = selectionModel === \"single\";\n const multiSelect =\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const actsLikeSingleSelect =\n singleSelect || (multiSelect && !keepExistingSelection && !rangeSelect);\n\n if (selectionModel === \"none\") {\n return NO_SELECTION;\n } else if (actsLikeSingleSelect) {\n return [itemIndex];\n } else if (rangeSelect) {\n if (selected.length === 0) {\n return [itemIndex];\n } else {\n const range: RangeTuple =\n itemIndex > activeItemIndex\n ? [activeItemIndex, itemIndex]\n : [itemIndex, activeItemIndex];\n return insertRange(selected, range);\n }\n } else if (!rangeSelect) {\n // what if we now have a range because we just filled agap between 2\n if (newSelectedFillsGapOrExtends(selected, itemIndex)) {\n return fillGapOrExtendSelection(selected, itemIndex);\n } else {\n return selected?.concat(itemIndex).sort(inAscendingOrder);\n }\n } else if (multiSelect) {\n // const [from, to] = idx > active ? [active, idx] : [idx, active];\n // newSelected = selected?.slice();\n // for (let i = from; i <= to; i++) {\n // if (!selected?.includes(i)) {\n // newSelected.push(i);\n // }\n // }\n }\n return NO_SELECTION;\n};\n\nfunction removeSelectedItem(selected: Selection, itemIndex: number) {\n if (selected.includes(itemIndex)) {\n return selected.filter((selectedItem) => selectedItem !== itemIndex);\n } else {\n const newSelected: Selection = [];\n for (const selectedItem of selected) {\n if (Array.isArray(selectedItem)) {\n if (rangeIncludes(selectedItem, itemIndex)) {\n newSelected.push(...splitRange(selectedItem, itemIndex));\n } else {\n newSelected.push(selectedItem);\n }\n } else {\n newSelected.push(selectedItem);\n }\n }\n return newSelected;\n }\n}\n\nfunction insertRange(selected: Selection, range: RangeTuple): Selection {\n const [from, to] = range;\n return selected.reduce<Selection>((newSelected, selectedItem) => {\n if (typeof selectedItem === \"number\") {\n if (selectedItem < from || selectedItem > to) {\n newSelected.push(selectedItem);\n } else if (!includedInRange(newSelected.at(-1), selectedItem)) {\n newSelected.push(range);\n }\n } else if (overlappingRange(selectedItem, range)) {\n newSelected.push(mergeRanges(selectedItem, range));\n } else {\n if (range[1] < selectedItem[0]) {\n newSelected.push(range);\n }\n newSelected.push(selectedItem);\n }\n\n return newSelected;\n }, []);\n}\n\nconst overlappingRange = (r1: RangeTuple, r2: RangeTuple) =>\n (r1[1] >= r2[0] && r1[1] <= r2[1]) || (r1[0] >= r2[0] && r1[0] <= r2[1]);\nconst mergeRanges = (r1: RangeTuple, r2: RangeTuple): RangeTuple => [\n Math.min(r1[0], r2[0]),\n Math.max(r1[1], r2[1]),\n];\n\nconst includedInRange = (\n selectedItem: SelectionItem | undefined,\n index: number\n) => {\n if (typeof selectedItem === \"undefined\" || typeof selectedItem === \"number\") {\n return false;\n } else return rangeIncludes(selectedItem, index);\n};\n\nconst rangeIncludes = (range: RangeTuple, index: number) =>\n index >= range[0] && index <= range[1];\n\nconst SINGLE_SELECTED_ROW =\n RowSelected.True + RowSelected.First + RowSelected.Last;\nconst FIRST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.First;\nconst LAST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.Last;\n\n/**\n * Determine the value for selected. We use a bitmap to represent a number of selection states\n * a row might exhibit. selected/not-selected is the fundamental value. We also identify first\n * row of a selected block, last row of a selected block;\n */\nexport const getSelectionStatus = (\n selected: Selection,\n itemIndex: number\n): number => {\n for (const item of selected) {\n if (typeof item === \"number\") {\n if (item === itemIndex) {\n return SINGLE_SELECTED_ROW;\n }\n } else if (rangeIncludes(item, itemIndex)) {\n if (itemIndex === item[0]) {\n return FIRST_SELECTED_ROW_OF_BLOCK;\n } else if (itemIndex === item[1]) {\n return LAST_SELECTED_ROW_OF_BLOCK;\n } else {\n return RowSelected.True;\n }\n }\n }\n return RowSelected.False;\n};\n\nexport const isSelected = (selected: Selection, itemIndex: number) => {\n for (const item of selected) {\n if (typeof item === \"number\") {\n if (item === itemIndex) {\n return true;\n } else if (item > itemIndex) {\n return false;\n }\n } else if (rangeIncludes(item, itemIndex)) {\n return true;\n } else if (item[0] > itemIndex) {\n return false;\n }\n }\n\n return false;\n};\n/**\n * Vuu server expects a full list if indexes of selected rows. Client represents selection in a more\n * efficient structure. This converts client structure to full server format.\n */\nexport const expandSelection = (selected: Selection): number[] => {\n if (selected.every((selectedItem) => typeof selectedItem === \"number\")) {\n return selected as number[];\n }\n const expandedSelected = [];\n for (const selectedItem of selected) {\n if (typeof selectedItem === \"number\") {\n expandedSelected.push(selectedItem);\n } else {\n for (let i = selectedItem[0]; i <= selectedItem[1]; i++) {\n expandedSelected.push(i);\n }\n }\n }\n return expandedSelected;\n};\n\nfunction splitRange([from, to]: RangeTuple, itemIndex: number): Selection {\n if (itemIndex === from) {\n return [[from + 1, to]];\n } else if (itemIndex === to) {\n return [[from, to - 1]];\n } else if (to - from === 2) {\n return [from, to];\n } else if (itemIndex === to - 1) {\n return [[from, to - 2], to];\n } else {\n return [\n [from, itemIndex - 1],\n [itemIndex + 1, to],\n ];\n }\n}\n\nexport type SelectionDiff = {\n added: SelectionItem[];\n removed: SelectionItem[];\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"selection-utils.js","sources":["../src/selection-utils.ts"],"sourcesContent":["import {\n DataSourceRow,\n RangeTuple,\n Selection,\n SelectionItem,\n} from \"@vuu-ui/vuu-data-types\";\nimport { TableSelectionModel } from \"@vuu-ui/vuu-table-types\";\nimport { metadataKeys } from \"./column-utils\";\n\nconst NO_SELECTION: number[] = [];\n\nconst { SELECTED } = metadataKeys;\n\nexport const RowSelected = {\n False: 0,\n True: 1,\n First: 2,\n Last: 4,\n};\n\nexport const isRowSelected = (row: DataSourceRow): boolean =>\n (row[SELECTED] & RowSelected.True) === RowSelected.True;\n\nexport const isRowSelectedLast = (row?: DataSourceRow): boolean =>\n row !== undefined && (row[SELECTED] & RowSelected.Last) === RowSelected.Last;\n\nconst inAscendingOrder = (item1: SelectionItem, item2: SelectionItem) => {\n const n1: number = typeof item1 === \"number\" ? item1 : item1[0];\n const n2: number = typeof item2 === \"number\" ? item2 : item2[0];\n return n1 - n2;\n};\n\nexport const deselectItem = (\n selectionModel: TableSelectionModel,\n selected: Selection,\n itemIndex: number,\n rangeSelect: boolean,\n keepExistingSelection = false\n): Selection => {\n const singleSelect = selectionModel === \"single\";\n const multiSelect =\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const actsLikeSingleSelect =\n singleSelect || (multiSelect && !keepExistingSelection && !rangeSelect);\n\n if (actsLikeSingleSelect || (!rangeSelect && !keepExistingSelection)) {\n return NO_SELECTION;\n } else if (!rangeSelect && keepExistingSelection) {\n return removeSelectedItem(selected, itemIndex);\n }\n return NO_SELECTION;\n};\n\nconst newSelectedFillsGapOrExtends = (\n selection: Selection,\n itemIndex: number\n): boolean => {\n for (let i = 0; i < selection.length; i++) {\n const item = selection[i];\n if (typeof item === \"number\") {\n if (item === itemIndex - 1) {\n return true;\n } else if (item > itemIndex) {\n return false;\n }\n } else if (item[0] === itemIndex + 1 || item[1] === itemIndex - 1) {\n return true;\n } else if (item[0] > itemIndex) {\n return false;\n }\n }\n return false;\n};\n\nconst fillGapOrExtendSelection = (\n selection: Selection,\n itemIndex: number\n): Selection => {\n for (let i = 0; i < selection.length; i++) {\n const item = selection[i];\n if (typeof item === \"number\") {\n if (item === itemIndex - 1) {\n const nextSelectionItem = selection[i + 1];\n if (nextSelectionItem === itemIndex + 1) {\n const newRange: SelectionItem = [item, nextSelectionItem];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else {\n const newRange: SelectionItem = [item, itemIndex];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n }\n } else if (item > itemIndex) {\n break;\n }\n } else if (item[0] === itemIndex + 1) {\n const newRange: SelectionItem = [itemIndex, item[1]];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n } else if (item[1] === itemIndex - 1) {\n // check to see whether another contiguous range follows\n const nextItem = selection[i + 1];\n if (Array.isArray(nextItem) && nextItem[0] === itemIndex + 1) {\n const newRange: SelectionItem = [item[0], nextItem[1]];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else if (typeof nextItem === \"number\" && nextItem === itemIndex + 1) {\n const newRange: SelectionItem = [item[0], nextItem];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 2));\n } else {\n const newRange: SelectionItem = [item[0], itemIndex];\n return selection\n .slice(0, i)\n .concat([newRange])\n .concat(selection.slice(i + 1));\n }\n }\n }\n\n return selection;\n};\n\nexport const selectItem = (\n selectionModel: TableSelectionModel,\n selected: Selection,\n itemIndex: number,\n rangeSelect: boolean,\n keepExistingSelection = false,\n activeItemIndex = -1\n): Selection => {\n const singleSelect = selectionModel === \"single\";\n const multiSelect =\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const actsLikeSingleSelect =\n singleSelect || (multiSelect && !keepExistingSelection && !rangeSelect);\n\n if (selectionModel === \"none\") {\n return NO_SELECTION;\n } else if (actsLikeSingleSelect) {\n return [itemIndex];\n } else if (rangeSelect) {\n if (selected.length === 0) {\n return [itemIndex];\n } else {\n const range: RangeTuple =\n itemIndex > activeItemIndex\n ? [activeItemIndex, itemIndex]\n : [itemIndex, activeItemIndex];\n return insertRange(selected, range);\n }\n } else if (!rangeSelect) {\n // what if we now have a range because we just filled agap between 2\n if (newSelectedFillsGapOrExtends(selected, itemIndex)) {\n return fillGapOrExtendSelection(selected, itemIndex);\n } else {\n return selected?.concat(itemIndex).sort(inAscendingOrder);\n }\n } else if (multiSelect) {\n // const [from, to] = idx > active ? [active, idx] : [idx, active];\n // newSelected = selected?.slice();\n // for (let i = from; i <= to; i++) {\n // if (!selected?.includes(i)) {\n // newSelected.push(i);\n // }\n // }\n }\n return NO_SELECTION;\n};\n\nfunction removeSelectedItem(selected: Selection, itemIndex: number) {\n if (selected.includes(itemIndex)) {\n return selected.filter((selectedItem) => selectedItem !== itemIndex);\n } else {\n const newSelected: Selection = [];\n for (const selectedItem of selected) {\n if (Array.isArray(selectedItem)) {\n if (rangeIncludes(selectedItem, itemIndex)) {\n newSelected.push(...splitRange(selectedItem, itemIndex));\n } else {\n newSelected.push(selectedItem);\n }\n } else {\n newSelected.push(selectedItem);\n }\n }\n return newSelected;\n }\n}\n\nfunction insertRange(selected: Selection, range: RangeTuple): Selection {\n const [from, to] = range;\n return selected.reduce<Selection>((newSelected, selectedItem) => {\n if (typeof selectedItem === \"number\") {\n if (selectedItem < from || selectedItem > to) {\n newSelected.push(selectedItem);\n } else if (!includedInRange(newSelected.at(-1), selectedItem)) {\n newSelected.push(range);\n }\n } else if (overlappingRange(selectedItem, range)) {\n newSelected.push(mergeRanges(selectedItem, range));\n } else {\n if (range[1] < selectedItem[0]) {\n newSelected.push(range);\n }\n newSelected.push(selectedItem);\n }\n\n return newSelected;\n }, []);\n}\n\nconst overlappingRange = (r1: RangeTuple, r2: RangeTuple) =>\n (r1[1] >= r2[0] && r1[1] <= r2[1]) || (r1[0] >= r2[0] && r1[0] <= r2[1]);\nconst mergeRanges = (r1: RangeTuple, r2: RangeTuple): RangeTuple => [\n Math.min(r1[0], r2[0]),\n Math.max(r1[1], r2[1]),\n];\n\nconst includedInRange = (\n selectedItem: SelectionItem | undefined,\n index: number\n) => {\n if (typeof selectedItem === \"undefined\" || typeof selectedItem === \"number\") {\n return false;\n } else return rangeIncludes(selectedItem, index);\n};\n\nconst rangeIncludes = (range: RangeTuple, index: number) =>\n index >= range[0] && index <= range[1];\n\nconst SINGLE_SELECTED_ROW =\n RowSelected.True + RowSelected.First + RowSelected.Last;\nconst FIRST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.First;\nconst LAST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.Last;\n\n/**\n * Determine the value for selected. We use a bitmap to represent a number of selection states\n * a row might exhibit. selected/not-selected is the fundamental value. We also identify first\n * row of a selected block, last row of a selected block;\n */\nexport const getSelectionStatus = (\n selected: Selection,\n itemIndex: number\n): number => {\n for (const item of selected) {\n if (typeof item === \"number\") {\n if (item === itemIndex) {\n return SINGLE_SELECTED_ROW;\n }\n } else if (rangeIncludes(item, itemIndex)) {\n if (itemIndex === item[0]) {\n return FIRST_SELECTED_ROW_OF_BLOCK;\n } else if (itemIndex === item[1]) {\n return LAST_SELECTED_ROW_OF_BLOCK;\n } else {\n return RowSelected.True;\n }\n }\n }\n return RowSelected.False;\n};\n\nexport const isSelected = (selected: Selection, itemIndex: number) => {\n for (const item of selected) {\n if (typeof item === \"number\") {\n if (item === itemIndex) {\n return true;\n } else if (item > itemIndex) {\n return false;\n }\n } else if (rangeIncludes(item, itemIndex)) {\n return true;\n } else if (item[0] > itemIndex) {\n return false;\n }\n }\n\n return false;\n};\n/**\n * Vuu server expects a full list if indexes of selected rows. Client represents selection in a more\n * efficient structure. This converts client structure to full server format.\n */\nexport const expandSelection = (selected: Selection): number[] => {\n if (selected.every((selectedItem) => typeof selectedItem === \"number\")) {\n return selected as number[];\n }\n const expandedSelected = [];\n for (const selectedItem of selected) {\n if (typeof selectedItem === \"number\") {\n expandedSelected.push(selectedItem);\n } else {\n for (let i = selectedItem[0]; i <= selectedItem[1]; i++) {\n expandedSelected.push(i);\n }\n }\n }\n return expandedSelected;\n};\n\nfunction splitRange([from, to]: RangeTuple, itemIndex: number): Selection {\n if (itemIndex === from) {\n return [[from + 1, to]];\n } else if (itemIndex === to) {\n return [[from, to - 1]];\n } else if (to - from === 2) {\n return [from, to];\n } else if (itemIndex === to - 1) {\n return [[from, to - 2], to];\n } else {\n return [\n [from, itemIndex - 1],\n [itemIndex + 1, to],\n ];\n }\n}\n\nexport type SelectionDiff = {\n added: SelectionItem[];\n removed: SelectionItem[];\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.8.
|
|
2
|
+
"version": "0.8.55",
|
|
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.8.
|
|
8
|
-
"@vuu-ui/vuu-table-types": "0.8.
|
|
9
|
-
"@vuu-ui/vuu-filter-types": "0.8.
|
|
10
|
-
"@vuu-ui/vuu-protocol-types": "0.8.
|
|
7
|
+
"@vuu-ui/vuu-data-types": "0.8.55",
|
|
8
|
+
"@vuu-ui/vuu-table-types": "0.8.55",
|
|
9
|
+
"@vuu-ui/vuu-filter-types": "0.8.55",
|
|
10
|
+
"@vuu-ui/vuu-protocol-types": "0.8.55"
|
|
11
11
|
},
|
|
12
12
|
"peerDependencies": {
|
|
13
13
|
"@internationalized/date": "^3.0.0",
|
|
14
|
-
"@vuu-ui/vuu-filter-parser": "0.8.
|
|
14
|
+
"@vuu-ui/vuu-filter-parser": "0.8.55",
|
|
15
15
|
"clsx": "^2.0.0",
|
|
16
16
|
"react": ">=17.0.2",
|
|
17
17
|
"react-dom": ">=17.0.2"
|
|
@@ -28,8 +28,8 @@ export declare const isConnectionStatusMessage: (msg: object | ConnectionStatusM
|
|
|
28
28
|
export declare const isConnectionQualityMetrics: (msg: object) => msg is ConnectionQualityMetrics;
|
|
29
29
|
export declare const messageHasResult: (msg: object) => msg is VuuUIMessageInRPC;
|
|
30
30
|
export declare const isErrorResponse: (response?: RpcResponse) => response is VuuUIMessageInRPCEditReject;
|
|
31
|
-
export declare const hasAction: (response?: RpcResponse) => response is
|
|
32
|
-
export declare const
|
|
31
|
+
export declare const hasAction: (response?: RpcResponse) => response is VuuUIMessageInRPCEditResponse | MenuRpcResponse<import("@vuu-ui/vuu-data-types").MenuRpcAction>;
|
|
32
|
+
export declare const isViewportMessage: (msg: object) => msg is VuuUIMessageOutViewport;
|
|
33
33
|
export declare const withConfigDefaults: (config: DataSourceConfig) => WithFullConfig & {
|
|
34
34
|
visualLink?: LinkDescriptorWithLabel;
|
|
35
35
|
};
|
package/types/index.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ export * from "./nanoid";
|
|
|
31
31
|
export * from "./react-utils";
|
|
32
32
|
export * from "./round-decimal";
|
|
33
33
|
export * from "./perf-utils";
|
|
34
|
+
export * from "./protocol-message-utils";
|
|
34
35
|
export * from "./range-utils";
|
|
35
36
|
export * from "./row-utils";
|
|
36
37
|
export * from "./selection-utils";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { MenuRpcAction, MenuRpcResponse, OpenDialogAction, RpcResponse, VuuUIMessageOut } from "@vuu-ui/vuu-data-types";
|
|
2
|
+
import { ClientToServerMenuRPC, VuuRpcRequest } from "@vuu-ui/vuu-protocol-types";
|
|
3
|
+
export declare const isVuuMenuRpcRequest: (message: VuuUIMessageOut | VuuRpcRequest | ClientToServerMenuRPC) => message is ClientToServerMenuRPC;
|
|
4
|
+
export declare const isOpenSessionTableDialogMessage: (rpcResponse: RpcResponse) => rpcResponse is MenuRpcResponse<OpenDialogAction>;
|
|
5
|
+
export declare const isOpenDialogAction: (action?: MenuRpcAction) => action is OpenDialogAction;
|