@vuu-ui/vuu-utils 0.8.51 → 0.8.52
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/index.js +7 -0
- package/cjs/index.js.map +1 -1
- package/cjs/menu-utils.js +145 -0
- package/cjs/menu-utils.js.map +1 -1
- package/esm/index.js +1 -1
- package/esm/menu-utils.js +139 -1
- package/esm/menu-utils.js.map +1 -1
- package/package.json +6 -5
- package/types/menu-utils.d.ts +18 -1
package/cjs/index.js
CHANGED
|
@@ -242,7 +242,14 @@ exports.getLocalEntity = localStorageUtils.getLocalEntity;
|
|
|
242
242
|
exports.saveLocalEntity = localStorageUtils.saveLocalEntity;
|
|
243
243
|
exports.getLoggingConfigForWorker = loggingUtils.getLoggingConfigForWorker;
|
|
244
244
|
exports.logger = loggingUtils.logger;
|
|
245
|
+
exports.buildMenuDescriptorFromVuuMenu = menuUtils.buildMenuDescriptorFromVuuMenu;
|
|
246
|
+
exports.getMenuRpcRequest = menuUtils.getMenuRpcRequest;
|
|
247
|
+
exports.isCellMenu = menuUtils.isCellMenu;
|
|
245
248
|
exports.isGroupMenuItemDescriptor = menuUtils.isGroupMenuItemDescriptor;
|
|
249
|
+
exports.isRoot = menuUtils.isRoot;
|
|
250
|
+
exports.isRowMenu = menuUtils.isRowMenu;
|
|
251
|
+
exports.isSelectionMenu = menuUtils.isSelectionMenu;
|
|
252
|
+
exports.isTableLocation = menuUtils.isTableLocation;
|
|
246
253
|
exports.assertModuleExportsAtLeastOneComponent = moduleUtils.assertModuleExportsAtLeastOneComponent;
|
|
247
254
|
exports.isModule = moduleUtils.isModule;
|
|
248
255
|
exports.uuid = index.uuid;
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/cjs/menu-utils.js
CHANGED
|
@@ -1,6 +1,151 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var vuuFilterParser = require('@vuu-ui/vuu-filter-parser');
|
|
4
|
+
var columnUtils = require('./column-utils.js');
|
|
5
|
+
|
|
6
|
+
const { KEY } = columnUtils.metadataKeys;
|
|
7
|
+
const isRoot = (menu) => menu.name === "ROOT";
|
|
8
|
+
const isCellMenu = (options) => options.context === "cell";
|
|
9
|
+
const isRowMenu = (options) => options.context === "row";
|
|
10
|
+
const isSelectionMenu = (options) => options.context === "selected-rows";
|
|
3
11
|
const isGroupMenuItemDescriptor = (menuItem) => menuItem !== void 0 && "children" in menuItem;
|
|
12
|
+
const isTableLocation = (location) => ["grid", "header", "filter"].includes(location);
|
|
13
|
+
const isVuuMenuItem = (menu) => "rpcName" in menu;
|
|
14
|
+
const isGroupMenuItem = (menu) => "menus" in menu;
|
|
15
|
+
const hasFilter = ({ filter }) => typeof filter === "string" && filter.length > 0;
|
|
16
|
+
const vuuContextCompatibleWithTableLocation = (uiLocation, vuuContext, selectedRowCount = 0) => {
|
|
17
|
+
switch (uiLocation) {
|
|
18
|
+
case "grid":
|
|
19
|
+
if (vuuContext === "selected-rows") {
|
|
20
|
+
return selectedRowCount > 0;
|
|
21
|
+
} else {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
case "header":
|
|
25
|
+
return vuuContext === "grid";
|
|
26
|
+
default:
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const gridRowMeetsFilterCriteria = (context, row, selectedRows, filter, columnMap) => {
|
|
31
|
+
if (context === "cell" || context === "row") {
|
|
32
|
+
const filterPredicate = vuuFilterParser.getFilterPredicate(columnMap, filter);
|
|
33
|
+
return filterPredicate(row);
|
|
34
|
+
} else if (context === "selected-rows") {
|
|
35
|
+
if (selectedRows.length === 0) {
|
|
36
|
+
return false;
|
|
37
|
+
} else {
|
|
38
|
+
const filterPredicate = vuuFilterParser.getFilterPredicate(columnMap, filter);
|
|
39
|
+
return selectedRows.every(filterPredicate);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
};
|
|
44
|
+
const menuShouldBeRenderedInThisContext = (menuItem, tableLocation, options) => {
|
|
45
|
+
if (isGroupMenuItem(menuItem)) {
|
|
46
|
+
return menuItem.menus.some(
|
|
47
|
+
(childMenu) => menuShouldBeRenderedInThisContext(childMenu, tableLocation, options)
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
if (!vuuContextCompatibleWithTableLocation(
|
|
51
|
+
tableLocation,
|
|
52
|
+
menuItem.context,
|
|
53
|
+
options.selectedRows?.length
|
|
54
|
+
)) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
if (tableLocation === "grid" && hasFilter(menuItem)) {
|
|
58
|
+
return gridRowMeetsFilterCriteria(
|
|
59
|
+
menuItem.context,
|
|
60
|
+
options.row,
|
|
61
|
+
options.selectedRows,
|
|
62
|
+
menuItem.filter,
|
|
63
|
+
options.columnMap
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
if (isCellMenu(menuItem) && menuItem.field !== "*") {
|
|
67
|
+
return menuItem.field === options.columnName;
|
|
68
|
+
}
|
|
69
|
+
return true;
|
|
70
|
+
};
|
|
71
|
+
const getMenuItemOptions = (menu, options) => {
|
|
72
|
+
switch (menu.context) {
|
|
73
|
+
case "cell":
|
|
74
|
+
return {
|
|
75
|
+
...menu,
|
|
76
|
+
field: options.columnName,
|
|
77
|
+
rowKey: options.row[KEY],
|
|
78
|
+
value: options.row[options.columnMap[options.columnName]]
|
|
79
|
+
};
|
|
80
|
+
case "row":
|
|
81
|
+
return {
|
|
82
|
+
...menu,
|
|
83
|
+
row: columnUtils.getRowRecord(options.row, options.columnMap),
|
|
84
|
+
rowKey: options.row[KEY]
|
|
85
|
+
};
|
|
86
|
+
default:
|
|
87
|
+
return menu;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const buildMenuDescriptorFromVuuMenu = (menu, tableLocation, options) => {
|
|
91
|
+
if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {
|
|
92
|
+
if (isVuuMenuItem(menu)) {
|
|
93
|
+
return {
|
|
94
|
+
label: menu.name,
|
|
95
|
+
action: "MENU_RPC_CALL",
|
|
96
|
+
options: getMenuItemOptions(menu, options)
|
|
97
|
+
};
|
|
98
|
+
} else {
|
|
99
|
+
const children = menu.menus.map(
|
|
100
|
+
(childMenu) => buildMenuDescriptorFromVuuMenu(childMenu, tableLocation, options)
|
|
101
|
+
).filter(
|
|
102
|
+
(childMenu) => childMenu !== void 0
|
|
103
|
+
);
|
|
104
|
+
if (children.length > 0) {
|
|
105
|
+
return {
|
|
106
|
+
label: menu.name,
|
|
107
|
+
children
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const getMenuRpcRequest = (options) => {
|
|
114
|
+
const { rpcName } = options;
|
|
115
|
+
if (isCellMenu(options)) {
|
|
116
|
+
return {
|
|
117
|
+
field: options.field,
|
|
118
|
+
rowKey: options.rowKey,
|
|
119
|
+
rpcName,
|
|
120
|
+
value: options.value,
|
|
121
|
+
type: "VIEW_PORT_MENU_CELL_RPC"
|
|
122
|
+
};
|
|
123
|
+
} else if (isRowMenu(options)) {
|
|
124
|
+
return {
|
|
125
|
+
rowKey: options.rowKey,
|
|
126
|
+
row: options.row,
|
|
127
|
+
rpcName,
|
|
128
|
+
type: "VIEW_PORT_MENU_ROW_RPC"
|
|
129
|
+
};
|
|
130
|
+
} else if (isSelectionMenu(options)) {
|
|
131
|
+
return {
|
|
132
|
+
rpcName,
|
|
133
|
+
type: "VIEW_PORT_MENUS_SELECT_RPC"
|
|
134
|
+
};
|
|
135
|
+
} else {
|
|
136
|
+
return {
|
|
137
|
+
rpcName,
|
|
138
|
+
type: "VIEW_PORT_MENU_TABLE_RPC"
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
};
|
|
4
142
|
|
|
143
|
+
exports.buildMenuDescriptorFromVuuMenu = buildMenuDescriptorFromVuuMenu;
|
|
144
|
+
exports.getMenuRpcRequest = getMenuRpcRequest;
|
|
145
|
+
exports.isCellMenu = isCellMenu;
|
|
5
146
|
exports.isGroupMenuItemDescriptor = isGroupMenuItemDescriptor;
|
|
147
|
+
exports.isRoot = isRoot;
|
|
148
|
+
exports.isRowMenu = isRowMenu;
|
|
149
|
+
exports.isSelectionMenu = isSelectionMenu;
|
|
150
|
+
exports.isTableLocation = isTableLocation;
|
|
6
151
|
//# sourceMappingURL=menu-utils.js.map
|
package/cjs/menu-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-utils.js","sources":["../src/menu-utils.ts"],"sourcesContent":["import {\n ContextMenuGroupItemDescriptor,\n ContextMenuItemDescriptor,\n} from \"@vuu-ui/vuu-data-types\";\n\nexport const isGroupMenuItemDescriptor = (\n menuItem?: ContextMenuItemDescriptor\n): menuItem is ContextMenuGroupItemDescriptor =>\n menuItem !== undefined && \"children\" in menuItem;\n"],"names":[],"mappings":";;AAKO,MAAM,yBAA4B,GAAA,CACvC,QAEA,KAAA,QAAA,KAAa,UAAa,UAAc,IAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"menu-utils.js","sources":["../src/menu-utils.ts"],"sourcesContent":["import {\n ContextMenuGroupItemDescriptor,\n ContextMenuItemDescriptor,\n DataSourceRow,\n} from \"@vuu-ui/vuu-data-types\";\nimport { getFilterPredicate } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n ClientToServerMenuCellRPC,\n ClientToServerMenuRPC,\n ClientToServerMenuRowRPC,\n VuuMenu,\n VuuMenuContext,\n VuuMenuItem,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n TableMenuLocation,\n VuuCellMenuItem,\n VuuRowMenuItem,\n} from \"@vuu-ui/vuu-table-types\";\nimport { getRowRecord, metadataKeys, type ColumnMap } from \"./column-utils\";\n\nexport type VuuServerMenuOptions = {\n columnMap: ColumnMap;\n columnName: string;\n row: DataSourceRow;\n selectedRows: DataSourceRow[];\n viewport: string;\n};\n\nconst { KEY } = metadataKeys;\n\nexport const isRoot = (menu: VuuMenu) => menu.name === \"ROOT\";\n\nexport const isCellMenu = (options: VuuMenuItem): options is VuuCellMenuItem =>\n options.context === \"cell\";\n\nexport const isRowMenu = (options: VuuMenuItem): options is VuuRowMenuItem =>\n options.context === \"row\";\n\nexport const isSelectionMenu = (options: VuuMenuItem): options is VuuMenuItem =>\n options.context === \"selected-rows\";\n\nexport const isGroupMenuItemDescriptor = (\n menuItem?: ContextMenuItemDescriptor\n): menuItem is ContextMenuGroupItemDescriptor =>\n menuItem !== undefined && \"children\" in menuItem;\n\nexport const isTableLocation = (\n location: string\n): location is TableMenuLocation =>\n [\"grid\", \"header\", \"filter\"].includes(location);\n\nconst isVuuMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenuItem =>\n \"rpcName\" in menu;\n\nconst isGroupMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenu =>\n \"menus\" in menu;\n\nconst hasFilter = ({ filter }: VuuMenuItem) =>\n typeof filter === \"string\" && filter.length > 0;\n\nconst vuuContextCompatibleWithTableLocation = (\n uiLocation: TableMenuLocation,\n vuuContext: VuuMenuContext,\n selectedRowCount = 0\n) => {\n switch (uiLocation) {\n case \"grid\":\n if (vuuContext === \"selected-rows\") {\n return selectedRowCount > 0;\n } else {\n return true;\n }\n case \"header\":\n return vuuContext === \"grid\";\n default:\n return false;\n }\n};\n\nconst gridRowMeetsFilterCriteria = (\n context: VuuMenuContext,\n row: DataSourceRow,\n selectedRows: DataSourceRow[],\n filter: string,\n columnMap: ColumnMap\n): boolean => {\n if (context === \"cell\" || context === \"row\") {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return filterPredicate(row);\n } else if (context === \"selected-rows\") {\n if (selectedRows.length === 0) {\n return false;\n } else {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return selectedRows.every(filterPredicate);\n }\n }\n return true;\n};\n\nconst menuShouldBeRenderedInThisContext = (\n menuItem: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: VuuServerMenuOptions\n): boolean => {\n if (isGroupMenuItem(menuItem)) {\n return menuItem.menus.some((childMenu) =>\n menuShouldBeRenderedInThisContext(childMenu, tableLocation, options)\n );\n }\n if (\n !vuuContextCompatibleWithTableLocation(\n tableLocation,\n menuItem.context,\n options.selectedRows?.length\n )\n ) {\n return false;\n }\n\n if (tableLocation === \"grid\" && hasFilter(menuItem)) {\n return gridRowMeetsFilterCriteria(\n menuItem.context,\n options.row,\n options.selectedRows,\n menuItem.filter,\n options.columnMap\n );\n }\n\n if (isCellMenu(menuItem) && menuItem.field !== \"*\") {\n return menuItem.field === options.columnName;\n }\n\n return true;\n};\n\nconst getMenuItemOptions = (\n menu: VuuMenuItem,\n options: VuuServerMenuOptions\n): VuuMenuItem => {\n switch (menu.context) {\n case \"cell\":\n return {\n ...menu,\n field: options.columnName,\n rowKey: options.row[KEY],\n value: options.row[options.columnMap[options.columnName]],\n } as VuuCellMenuItem;\n case \"row\":\n return {\n ...menu,\n row: getRowRecord(options.row, options.columnMap),\n rowKey: options.row[KEY],\n } as VuuRowMenuItem;\n default:\n return menu;\n }\n};\n\nexport const buildMenuDescriptorFromVuuMenu = (\n menu: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: VuuServerMenuOptions\n): ContextMenuItemDescriptor | undefined => {\n if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {\n if (isVuuMenuItem(menu)) {\n return {\n label: menu.name,\n action: \"MENU_RPC_CALL\",\n options: getMenuItemOptions(menu, options),\n };\n } else {\n const children = menu.menus\n .map((childMenu) =>\n buildMenuDescriptorFromVuuMenu(childMenu, tableLocation, options)\n )\n .filter(\n (childMenu) => childMenu !== undefined\n ) as ContextMenuItemDescriptor[];\n if (children.length > 0) {\n return {\n label: menu.name,\n children,\n };\n }\n }\n }\n};\n\nexport const getMenuRpcRequest = (\n options: VuuMenuItem\n): Omit<ClientToServerMenuRPC, \"vpId\"> => {\n const { rpcName } = options;\n if (isCellMenu(options)) {\n return {\n field: options.field,\n rowKey: options.rowKey,\n rpcName,\n value: options.value,\n type: \"VIEW_PORT_MENU_CELL_RPC\",\n } as Omit<ClientToServerMenuCellRPC, \"vpId\">;\n } else if (isRowMenu(options)) {\n return {\n rowKey: options.rowKey,\n row: options.row,\n rpcName,\n type: \"VIEW_PORT_MENU_ROW_RPC\",\n } as Omit<ClientToServerMenuRowRPC, \"vpId\">;\n } else if (isSelectionMenu(options)) {\n return {\n rpcName,\n type: \"VIEW_PORT_MENUS_SELECT_RPC\",\n } as Omit<ClientToServerMenuRPC, \"vpId\">;\n } else {\n return {\n rpcName,\n type: \"VIEW_PORT_MENU_TABLE_RPC\",\n } as Omit<ClientToServerMenuRPC, \"vpId\">;\n }\n};\n"],"names":["metadataKeys","getFilterPredicate","getRowRecord"],"mappings":"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"}
|
package/esm/index.js
CHANGED
|
@@ -29,7 +29,7 @@ export { ArrowDown, ArrowLeft, ArrowRight, ArrowUp, End, Enter, Escape, Home, Pa
|
|
|
29
29
|
export { KeySet } from './keyset.js';
|
|
30
30
|
export { getAllLocalEntity, getLocalEntity, saveLocalEntity } from './local-storage-utils.js';
|
|
31
31
|
export { getLoggingConfigForWorker, logger } from './logging-utils.js';
|
|
32
|
-
export { isGroupMenuItemDescriptor } from './menu-utils.js';
|
|
32
|
+
export { buildMenuDescriptorFromVuuMenu, getMenuRpcRequest, isCellMenu, isGroupMenuItemDescriptor, isRoot, isRowMenu, isSelectionMenu, isTableLocation } from './menu-utils.js';
|
|
33
33
|
export { assertModuleExportsAtLeastOneComponent, isModule } from './module-utils.js';
|
|
34
34
|
export { uuid } from './nanoid/index.js';
|
|
35
35
|
export { asReactElements } from './react-utils.js';
|
package/esm/menu-utils.js
CHANGED
|
@@ -1,4 +1,142 @@
|
|
|
1
|
+
import { getFilterPredicate } from '@vuu-ui/vuu-filter-parser';
|
|
2
|
+
import { getRowRecord, metadataKeys } from './column-utils.js';
|
|
3
|
+
|
|
4
|
+
const { KEY } = metadataKeys;
|
|
5
|
+
const isRoot = (menu) => menu.name === "ROOT";
|
|
6
|
+
const isCellMenu = (options) => options.context === "cell";
|
|
7
|
+
const isRowMenu = (options) => options.context === "row";
|
|
8
|
+
const isSelectionMenu = (options) => options.context === "selected-rows";
|
|
1
9
|
const isGroupMenuItemDescriptor = (menuItem) => menuItem !== void 0 && "children" in menuItem;
|
|
10
|
+
const isTableLocation = (location) => ["grid", "header", "filter"].includes(location);
|
|
11
|
+
const isVuuMenuItem = (menu) => "rpcName" in menu;
|
|
12
|
+
const isGroupMenuItem = (menu) => "menus" in menu;
|
|
13
|
+
const hasFilter = ({ filter }) => typeof filter === "string" && filter.length > 0;
|
|
14
|
+
const vuuContextCompatibleWithTableLocation = (uiLocation, vuuContext, selectedRowCount = 0) => {
|
|
15
|
+
switch (uiLocation) {
|
|
16
|
+
case "grid":
|
|
17
|
+
if (vuuContext === "selected-rows") {
|
|
18
|
+
return selectedRowCount > 0;
|
|
19
|
+
} else {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
case "header":
|
|
23
|
+
return vuuContext === "grid";
|
|
24
|
+
default:
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const gridRowMeetsFilterCriteria = (context, row, selectedRows, filter, columnMap) => {
|
|
29
|
+
if (context === "cell" || context === "row") {
|
|
30
|
+
const filterPredicate = getFilterPredicate(columnMap, filter);
|
|
31
|
+
return filterPredicate(row);
|
|
32
|
+
} else if (context === "selected-rows") {
|
|
33
|
+
if (selectedRows.length === 0) {
|
|
34
|
+
return false;
|
|
35
|
+
} else {
|
|
36
|
+
const filterPredicate = getFilterPredicate(columnMap, filter);
|
|
37
|
+
return selectedRows.every(filterPredicate);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
};
|
|
42
|
+
const menuShouldBeRenderedInThisContext = (menuItem, tableLocation, options) => {
|
|
43
|
+
if (isGroupMenuItem(menuItem)) {
|
|
44
|
+
return menuItem.menus.some(
|
|
45
|
+
(childMenu) => menuShouldBeRenderedInThisContext(childMenu, tableLocation, options)
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
if (!vuuContextCompatibleWithTableLocation(
|
|
49
|
+
tableLocation,
|
|
50
|
+
menuItem.context,
|
|
51
|
+
options.selectedRows?.length
|
|
52
|
+
)) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
if (tableLocation === "grid" && hasFilter(menuItem)) {
|
|
56
|
+
return gridRowMeetsFilterCriteria(
|
|
57
|
+
menuItem.context,
|
|
58
|
+
options.row,
|
|
59
|
+
options.selectedRows,
|
|
60
|
+
menuItem.filter,
|
|
61
|
+
options.columnMap
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
if (isCellMenu(menuItem) && menuItem.field !== "*") {
|
|
65
|
+
return menuItem.field === options.columnName;
|
|
66
|
+
}
|
|
67
|
+
return true;
|
|
68
|
+
};
|
|
69
|
+
const getMenuItemOptions = (menu, options) => {
|
|
70
|
+
switch (menu.context) {
|
|
71
|
+
case "cell":
|
|
72
|
+
return {
|
|
73
|
+
...menu,
|
|
74
|
+
field: options.columnName,
|
|
75
|
+
rowKey: options.row[KEY],
|
|
76
|
+
value: options.row[options.columnMap[options.columnName]]
|
|
77
|
+
};
|
|
78
|
+
case "row":
|
|
79
|
+
return {
|
|
80
|
+
...menu,
|
|
81
|
+
row: getRowRecord(options.row, options.columnMap),
|
|
82
|
+
rowKey: options.row[KEY]
|
|
83
|
+
};
|
|
84
|
+
default:
|
|
85
|
+
return menu;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
const buildMenuDescriptorFromVuuMenu = (menu, tableLocation, options) => {
|
|
89
|
+
if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {
|
|
90
|
+
if (isVuuMenuItem(menu)) {
|
|
91
|
+
return {
|
|
92
|
+
label: menu.name,
|
|
93
|
+
action: "MENU_RPC_CALL",
|
|
94
|
+
options: getMenuItemOptions(menu, options)
|
|
95
|
+
};
|
|
96
|
+
} else {
|
|
97
|
+
const children = menu.menus.map(
|
|
98
|
+
(childMenu) => buildMenuDescriptorFromVuuMenu(childMenu, tableLocation, options)
|
|
99
|
+
).filter(
|
|
100
|
+
(childMenu) => childMenu !== void 0
|
|
101
|
+
);
|
|
102
|
+
if (children.length > 0) {
|
|
103
|
+
return {
|
|
104
|
+
label: menu.name,
|
|
105
|
+
children
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const getMenuRpcRequest = (options) => {
|
|
112
|
+
const { rpcName } = options;
|
|
113
|
+
if (isCellMenu(options)) {
|
|
114
|
+
return {
|
|
115
|
+
field: options.field,
|
|
116
|
+
rowKey: options.rowKey,
|
|
117
|
+
rpcName,
|
|
118
|
+
value: options.value,
|
|
119
|
+
type: "VIEW_PORT_MENU_CELL_RPC"
|
|
120
|
+
};
|
|
121
|
+
} else if (isRowMenu(options)) {
|
|
122
|
+
return {
|
|
123
|
+
rowKey: options.rowKey,
|
|
124
|
+
row: options.row,
|
|
125
|
+
rpcName,
|
|
126
|
+
type: "VIEW_PORT_MENU_ROW_RPC"
|
|
127
|
+
};
|
|
128
|
+
} else if (isSelectionMenu(options)) {
|
|
129
|
+
return {
|
|
130
|
+
rpcName,
|
|
131
|
+
type: "VIEW_PORT_MENUS_SELECT_RPC"
|
|
132
|
+
};
|
|
133
|
+
} else {
|
|
134
|
+
return {
|
|
135
|
+
rpcName,
|
|
136
|
+
type: "VIEW_PORT_MENU_TABLE_RPC"
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
};
|
|
2
140
|
|
|
3
|
-
export { isGroupMenuItemDescriptor };
|
|
141
|
+
export { buildMenuDescriptorFromVuuMenu, getMenuRpcRequest, isCellMenu, isGroupMenuItemDescriptor, isRoot, isRowMenu, isSelectionMenu, isTableLocation };
|
|
4
142
|
//# sourceMappingURL=menu-utils.js.map
|
package/esm/menu-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-utils.js","sources":["../src/menu-utils.ts"],"sourcesContent":["import {\n ContextMenuGroupItemDescriptor,\n ContextMenuItemDescriptor,\n} from \"@vuu-ui/vuu-data-types\";\n\nexport const isGroupMenuItemDescriptor = (\n menuItem?: ContextMenuItemDescriptor\n): menuItem is ContextMenuGroupItemDescriptor =>\n menuItem !== undefined && \"children\" in menuItem;\n"],"names":[],"mappings":"AAKO,MAAM,yBAA4B,GAAA,CACvC,QAEA,KAAA,QAAA,KAAa,UAAa,UAAc,IAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"menu-utils.js","sources":["../src/menu-utils.ts"],"sourcesContent":["import {\n ContextMenuGroupItemDescriptor,\n ContextMenuItemDescriptor,\n DataSourceRow,\n} from \"@vuu-ui/vuu-data-types\";\nimport { getFilterPredicate } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n ClientToServerMenuCellRPC,\n ClientToServerMenuRPC,\n ClientToServerMenuRowRPC,\n VuuMenu,\n VuuMenuContext,\n VuuMenuItem,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n TableMenuLocation,\n VuuCellMenuItem,\n VuuRowMenuItem,\n} from \"@vuu-ui/vuu-table-types\";\nimport { getRowRecord, metadataKeys, type ColumnMap } from \"./column-utils\";\n\nexport type VuuServerMenuOptions = {\n columnMap: ColumnMap;\n columnName: string;\n row: DataSourceRow;\n selectedRows: DataSourceRow[];\n viewport: string;\n};\n\nconst { KEY } = metadataKeys;\n\nexport const isRoot = (menu: VuuMenu) => menu.name === \"ROOT\";\n\nexport const isCellMenu = (options: VuuMenuItem): options is VuuCellMenuItem =>\n options.context === \"cell\";\n\nexport const isRowMenu = (options: VuuMenuItem): options is VuuRowMenuItem =>\n options.context === \"row\";\n\nexport const isSelectionMenu = (options: VuuMenuItem): options is VuuMenuItem =>\n options.context === \"selected-rows\";\n\nexport const isGroupMenuItemDescriptor = (\n menuItem?: ContextMenuItemDescriptor\n): menuItem is ContextMenuGroupItemDescriptor =>\n menuItem !== undefined && \"children\" in menuItem;\n\nexport const isTableLocation = (\n location: string\n): location is TableMenuLocation =>\n [\"grid\", \"header\", \"filter\"].includes(location);\n\nconst isVuuMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenuItem =>\n \"rpcName\" in menu;\n\nconst isGroupMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenu =>\n \"menus\" in menu;\n\nconst hasFilter = ({ filter }: VuuMenuItem) =>\n typeof filter === \"string\" && filter.length > 0;\n\nconst vuuContextCompatibleWithTableLocation = (\n uiLocation: TableMenuLocation,\n vuuContext: VuuMenuContext,\n selectedRowCount = 0\n) => {\n switch (uiLocation) {\n case \"grid\":\n if (vuuContext === \"selected-rows\") {\n return selectedRowCount > 0;\n } else {\n return true;\n }\n case \"header\":\n return vuuContext === \"grid\";\n default:\n return false;\n }\n};\n\nconst gridRowMeetsFilterCriteria = (\n context: VuuMenuContext,\n row: DataSourceRow,\n selectedRows: DataSourceRow[],\n filter: string,\n columnMap: ColumnMap\n): boolean => {\n if (context === \"cell\" || context === \"row\") {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return filterPredicate(row);\n } else if (context === \"selected-rows\") {\n if (selectedRows.length === 0) {\n return false;\n } else {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return selectedRows.every(filterPredicate);\n }\n }\n return true;\n};\n\nconst menuShouldBeRenderedInThisContext = (\n menuItem: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: VuuServerMenuOptions\n): boolean => {\n if (isGroupMenuItem(menuItem)) {\n return menuItem.menus.some((childMenu) =>\n menuShouldBeRenderedInThisContext(childMenu, tableLocation, options)\n );\n }\n if (\n !vuuContextCompatibleWithTableLocation(\n tableLocation,\n menuItem.context,\n options.selectedRows?.length\n )\n ) {\n return false;\n }\n\n if (tableLocation === \"grid\" && hasFilter(menuItem)) {\n return gridRowMeetsFilterCriteria(\n menuItem.context,\n options.row,\n options.selectedRows,\n menuItem.filter,\n options.columnMap\n );\n }\n\n if (isCellMenu(menuItem) && menuItem.field !== \"*\") {\n return menuItem.field === options.columnName;\n }\n\n return true;\n};\n\nconst getMenuItemOptions = (\n menu: VuuMenuItem,\n options: VuuServerMenuOptions\n): VuuMenuItem => {\n switch (menu.context) {\n case \"cell\":\n return {\n ...menu,\n field: options.columnName,\n rowKey: options.row[KEY],\n value: options.row[options.columnMap[options.columnName]],\n } as VuuCellMenuItem;\n case \"row\":\n return {\n ...menu,\n row: getRowRecord(options.row, options.columnMap),\n rowKey: options.row[KEY],\n } as VuuRowMenuItem;\n default:\n return menu;\n }\n};\n\nexport const buildMenuDescriptorFromVuuMenu = (\n menu: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: VuuServerMenuOptions\n): ContextMenuItemDescriptor | undefined => {\n if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {\n if (isVuuMenuItem(menu)) {\n return {\n label: menu.name,\n action: \"MENU_RPC_CALL\",\n options: getMenuItemOptions(menu, options),\n };\n } else {\n const children = menu.menus\n .map((childMenu) =>\n buildMenuDescriptorFromVuuMenu(childMenu, tableLocation, options)\n )\n .filter(\n (childMenu) => childMenu !== undefined\n ) as ContextMenuItemDescriptor[];\n if (children.length > 0) {\n return {\n label: menu.name,\n children,\n };\n }\n }\n }\n};\n\nexport const getMenuRpcRequest = (\n options: VuuMenuItem\n): Omit<ClientToServerMenuRPC, \"vpId\"> => {\n const { rpcName } = options;\n if (isCellMenu(options)) {\n return {\n field: options.field,\n rowKey: options.rowKey,\n rpcName,\n value: options.value,\n type: \"VIEW_PORT_MENU_CELL_RPC\",\n } as Omit<ClientToServerMenuCellRPC, \"vpId\">;\n } else if (isRowMenu(options)) {\n return {\n rowKey: options.rowKey,\n row: options.row,\n rpcName,\n type: \"VIEW_PORT_MENU_ROW_RPC\",\n } as Omit<ClientToServerMenuRowRPC, \"vpId\">;\n } else if (isSelectionMenu(options)) {\n return {\n rpcName,\n type: \"VIEW_PORT_MENUS_SELECT_RPC\",\n } as Omit<ClientToServerMenuRPC, \"vpId\">;\n } else {\n return {\n rpcName,\n type: \"VIEW_PORT_MENU_TABLE_RPC\",\n } as Omit<ClientToServerMenuRPC, \"vpId\">;\n }\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.8.
|
|
2
|
+
"version": "0.8.52",
|
|
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.52",
|
|
8
|
+
"@vuu-ui/vuu-table-types": "0.8.52",
|
|
9
|
+
"@vuu-ui/vuu-filter-types": "0.8.52",
|
|
10
|
+
"@vuu-ui/vuu-protocol-types": "0.8.52"
|
|
11
11
|
},
|
|
12
12
|
"peerDependencies": {
|
|
13
13
|
"@internationalized/date": "^3.0.0",
|
|
14
|
+
"@vuu-ui/vuu-filter-parser": "0.8.52",
|
|
14
15
|
"clsx": "^2.0.0",
|
|
15
16
|
"react": ">=17.0.2",
|
|
16
17
|
"react-dom": ">=17.0.2"
|
package/types/menu-utils.d.ts
CHANGED
|
@@ -1,2 +1,19 @@
|
|
|
1
|
-
import { ContextMenuGroupItemDescriptor, ContextMenuItemDescriptor } from "@vuu-ui/vuu-data-types";
|
|
1
|
+
import { ContextMenuGroupItemDescriptor, ContextMenuItemDescriptor, DataSourceRow } from "@vuu-ui/vuu-data-types";
|
|
2
|
+
import { ClientToServerMenuRPC, VuuMenu, VuuMenuItem } from "@vuu-ui/vuu-protocol-types";
|
|
3
|
+
import { TableMenuLocation, VuuCellMenuItem, VuuRowMenuItem } from "@vuu-ui/vuu-table-types";
|
|
4
|
+
import { type ColumnMap } from "./column-utils";
|
|
5
|
+
export type VuuServerMenuOptions = {
|
|
6
|
+
columnMap: ColumnMap;
|
|
7
|
+
columnName: string;
|
|
8
|
+
row: DataSourceRow;
|
|
9
|
+
selectedRows: DataSourceRow[];
|
|
10
|
+
viewport: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const isRoot: (menu: VuuMenu) => boolean;
|
|
13
|
+
export declare const isCellMenu: (options: VuuMenuItem) => options is VuuCellMenuItem;
|
|
14
|
+
export declare const isRowMenu: (options: VuuMenuItem) => options is VuuRowMenuItem;
|
|
15
|
+
export declare const isSelectionMenu: (options: VuuMenuItem) => options is VuuMenuItem;
|
|
2
16
|
export declare const isGroupMenuItemDescriptor: (menuItem?: ContextMenuItemDescriptor) => menuItem is ContextMenuGroupItemDescriptor;
|
|
17
|
+
export declare const isTableLocation: (location: string) => location is TableMenuLocation;
|
|
18
|
+
export declare const buildMenuDescriptorFromVuuMenu: (menu: VuuMenu | VuuMenuItem, tableLocation: TableMenuLocation, options: VuuServerMenuOptions) => ContextMenuItemDescriptor | undefined;
|
|
19
|
+
export declare const getMenuRpcRequest: (options: VuuMenuItem) => Omit<ClientToServerMenuRPC, "vpId">;
|