@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 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
@@ -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
@@ -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.51",
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.51",
8
- "@vuu-ui/vuu-table-types": "0.8.51",
9
- "@vuu-ui/vuu-filter-types": "0.8.51",
10
- "@vuu-ui/vuu-protocol-types": "0.8.51"
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"
@@ -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">;