@vuu-ui/vuu-data-react 3.0.0 → 3.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/package.json +24 -20
  2. package/src/data-editing/EditForm.css.js +53 -0
  3. package/src/data-editing/EditForm.js +82 -0
  4. package/src/data-editing/UnsavedChangesReport.css.js +27 -0
  5. package/src/data-editing/UnsavedChangesReport.js +41 -0
  6. package/src/data-editing/edit-rule-validation-checker.js +30 -0
  7. package/src/data-editing/edit-validation-rules.js +33 -0
  8. package/src/data-editing/form-edit-state.js +16 -0
  9. package/src/data-editing/get-data-item-edit-control.js +63 -0
  10. package/src/data-editing/index.js +6 -0
  11. package/src/data-editing/useEditForm.js +253 -0
  12. package/src/datasource-provider/VuuDataSourceProvider.js +20 -0
  13. package/src/datasource-provider/index.js +1 -0
  14. package/src/datasource-provider/useAutoLoginToVuuServer.js +42 -0
  15. package/src/hooks/useLookupValues.js +93 -0
  16. package/src/hooks/useSessionDataSource.js +37 -0
  17. package/src/hooks/useTypeaheadSuggestions.js +50 -0
  18. package/src/hooks/useVisualLinks.js +87 -0
  19. package/src/hooks/useVuuMenuActions.js +269 -0
  20. package/src/hooks/useVuuTables.js +32 -0
  21. package/src/index.js +10 -0
  22. package/src/lost-connection-indicator/LostConnectionIndicator.css.js +29 -0
  23. package/src/lost-connection-indicator/LostConnectionIndicator.js +30 -0
  24. package/src/lost-connection-indicator/useLostConnection.js +28 -0
  25. package/src/session-editing-form/SessionEditingForm.css.js +47 -0
  26. package/src/session-editing-form/SessionEditingForm.js +236 -0
  27. package/src/session-editing-form/index.js +1 -0
  28. package/cjs/data-editing/EditForm.css.js +0 -6
  29. package/cjs/data-editing/EditForm.css.js.map +0 -1
  30. package/cjs/data-editing/EditForm.js +0 -90
  31. package/cjs/data-editing/EditForm.js.map +0 -1
  32. package/cjs/data-editing/UnsavedChangesReport.css.js +0 -6
  33. package/cjs/data-editing/UnsavedChangesReport.css.js.map +0 -1
  34. package/cjs/data-editing/UnsavedChangesReport.js +0 -29
  35. package/cjs/data-editing/UnsavedChangesReport.js.map +0 -1
  36. package/cjs/data-editing/edit-rule-validation-checker.js +0 -41
  37. package/cjs/data-editing/edit-rule-validation-checker.js.map +0 -1
  38. package/cjs/data-editing/edit-validation-rules.js +0 -52
  39. package/cjs/data-editing/edit-validation-rules.js.map +0 -1
  40. package/cjs/data-editing/form-edit-state.js +0 -26
  41. package/cjs/data-editing/form-edit-state.js.map +0 -1
  42. package/cjs/data-editing/get-data-item-edit-control.js +0 -106
  43. package/cjs/data-editing/get-data-item-edit-control.js.map +0 -1
  44. package/cjs/data-editing/useEditForm.js +0 -258
  45. package/cjs/data-editing/useEditForm.js.map +0 -1
  46. package/cjs/datasource-provider/VuuDataSourceProvider.js +0 -34
  47. package/cjs/datasource-provider/VuuDataSourceProvider.js.map +0 -1
  48. package/cjs/datasource-provider/useAutoLoginToVuuServer.js +0 -52
  49. package/cjs/datasource-provider/useAutoLoginToVuuServer.js.map +0 -1
  50. package/cjs/hooks/useLookupValues.js +0 -100
  51. package/cjs/hooks/useLookupValues.js.map +0 -1
  52. package/cjs/hooks/useSessionDataSource.js +0 -58
  53. package/cjs/hooks/useSessionDataSource.js.map +0 -1
  54. package/cjs/hooks/useTypeaheadSuggestions.js +0 -57
  55. package/cjs/hooks/useTypeaheadSuggestions.js.map +0 -1
  56. package/cjs/hooks/useVisualLinks.js +0 -84
  57. package/cjs/hooks/useVisualLinks.js.map +0 -1
  58. package/cjs/hooks/useVuuMenuActions.js +0 -352
  59. package/cjs/hooks/useVuuMenuActions.js.map +0 -1
  60. package/cjs/hooks/useVuuTables.js +0 -38
  61. package/cjs/hooks/useVuuTables.js.map +0 -1
  62. package/cjs/index.js +0 -42
  63. package/cjs/index.js.map +0 -1
  64. package/cjs/lost-connection-indicator/LostConnectionIndicator.css.js +0 -6
  65. package/cjs/lost-connection-indicator/LostConnectionIndicator.css.js.map +0 -1
  66. package/cjs/lost-connection-indicator/LostConnectionIndicator.js +0 -24
  67. package/cjs/lost-connection-indicator/LostConnectionIndicator.js.map +0 -1
  68. package/cjs/lost-connection-indicator/useLostConnection.js +0 -34
  69. package/cjs/lost-connection-indicator/useLostConnection.js.map +0 -1
  70. package/cjs/session-editing-form/SessionEditingForm.css.js +0 -6
  71. package/cjs/session-editing-form/SessionEditingForm.css.js.map +0 -1
  72. package/cjs/session-editing-form/SessionEditingForm.js +0 -270
  73. package/cjs/session-editing-form/SessionEditingForm.js.map +0 -1
  74. package/esm/data-editing/EditForm.css.js +0 -4
  75. package/esm/data-editing/EditForm.css.js.map +0 -1
  76. package/esm/data-editing/EditForm.js +0 -88
  77. package/esm/data-editing/EditForm.js.map +0 -1
  78. package/esm/data-editing/UnsavedChangesReport.css.js +0 -4
  79. package/esm/data-editing/UnsavedChangesReport.css.js.map +0 -1
  80. package/esm/data-editing/UnsavedChangesReport.js +0 -27
  81. package/esm/data-editing/UnsavedChangesReport.js.map +0 -1
  82. package/esm/data-editing/edit-rule-validation-checker.js +0 -37
  83. package/esm/data-editing/edit-rule-validation-checker.js.map +0 -1
  84. package/esm/data-editing/edit-validation-rules.js +0 -50
  85. package/esm/data-editing/edit-validation-rules.js.map +0 -1
  86. package/esm/data-editing/form-edit-state.js +0 -23
  87. package/esm/data-editing/form-edit-state.js.map +0 -1
  88. package/esm/data-editing/get-data-item-edit-control.js +0 -104
  89. package/esm/data-editing/get-data-item-edit-control.js.map +0 -1
  90. package/esm/data-editing/useEditForm.js +0 -256
  91. package/esm/data-editing/useEditForm.js.map +0 -1
  92. package/esm/datasource-provider/VuuDataSourceProvider.js +0 -32
  93. package/esm/datasource-provider/VuuDataSourceProvider.js.map +0 -1
  94. package/esm/datasource-provider/useAutoLoginToVuuServer.js +0 -50
  95. package/esm/datasource-provider/useAutoLoginToVuuServer.js.map +0 -1
  96. package/esm/hooks/useLookupValues.js +0 -98
  97. package/esm/hooks/useLookupValues.js.map +0 -1
  98. package/esm/hooks/useSessionDataSource.js +0 -56
  99. package/esm/hooks/useSessionDataSource.js.map +0 -1
  100. package/esm/hooks/useTypeaheadSuggestions.js +0 -54
  101. package/esm/hooks/useTypeaheadSuggestions.js.map +0 -1
  102. package/esm/hooks/useVisualLinks.js +0 -82
  103. package/esm/hooks/useVisualLinks.js.map +0 -1
  104. package/esm/hooks/useVuuMenuActions.js +0 -348
  105. package/esm/hooks/useVuuMenuActions.js.map +0 -1
  106. package/esm/hooks/useVuuTables.js +0 -36
  107. package/esm/hooks/useVuuTables.js.map +0 -1
  108. package/esm/index.js +0 -16
  109. package/esm/index.js.map +0 -1
  110. package/esm/lost-connection-indicator/LostConnectionIndicator.css.js +0 -4
  111. package/esm/lost-connection-indicator/LostConnectionIndicator.css.js.map +0 -1
  112. package/esm/lost-connection-indicator/LostConnectionIndicator.js +0 -22
  113. package/esm/lost-connection-indicator/LostConnectionIndicator.js.map +0 -1
  114. package/esm/lost-connection-indicator/useLostConnection.js +0 -32
  115. package/esm/lost-connection-indicator/useLostConnection.js.map +0 -1
  116. package/esm/session-editing-form/SessionEditingForm.css.js +0 -4
  117. package/esm/session-editing-form/SessionEditingForm.css.js.map +0 -1
  118. package/esm/session-editing-form/SessionEditingForm.js +0 -268
  119. package/esm/session-editing-form/SessionEditingForm.js.map +0 -1
@@ -1,58 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
- var react = require('react');
5
-
6
- const sessionState = /* @__PURE__ */ new Map();
7
- const useSessionDataSource = (props) => {
8
- const { VuuDataSource } = vuuUtils.useData();
9
- const dataSourceConfigRef = react.useRef(void 0);
10
- const getDataSource = react.useCallback(
11
- (sessionKey, dataSourceConstructorProps) => {
12
- let ds = sessionState.get(sessionKey);
13
- if (ds) {
14
- return ds;
15
- }
16
- if (dataSourceConstructorProps?.columns) {
17
- ds = new VuuDataSource({
18
- ...dataSourceConstructorProps,
19
- viewport: sessionKey,
20
- ...dataSourceConfigRef.current
21
- });
22
- if (props?.onConfigChange) {
23
- ds.on("config", props.onConfigChange);
24
- }
25
- sessionState.set(sessionKey, ds);
26
- return ds;
27
- } else {
28
- throw Error(
29
- `[useSessionDataSource] unable to create new DataSource, columns have not been defined `
30
- );
31
- }
32
- },
33
- [VuuDataSource, props?.onConfigChange]
34
- );
35
- const clearDataSource = react.useCallback(
36
- (sessionKey, unsubscribe) => {
37
- const ds = sessionState.get(sessionKey);
38
- if (ds) {
39
- sessionState.delete(sessionKey);
40
- if (unsubscribe === true) {
41
- ds.unsubscribe();
42
- }
43
- } else {
44
- console.warn(
45
- `[useSessionbDatasource] clearDataSource ${sessionKey} not found `
46
- );
47
- }
48
- },
49
- []
50
- );
51
- return {
52
- clearDataSource,
53
- getDataSource
54
- };
55
- };
56
-
57
- exports.useSessionDataSource = useSessionDataSource;
58
- //# sourceMappingURL=useSessionDataSource.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSessionDataSource.js","sources":["../../../../packages/vuu-data-react/src/hooks/useSessionDataSource.ts"],"sourcesContent":["import type {\n DataSource,\n DataSourceConfig,\n DataSourceConfigChangeHandler,\n DataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-types\";\nimport { useData } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\n\nconst sessionState = new Map<string, DataSource>();\n\nexport interface SessionStateHookProps {\n onConfigChange?: DataSourceConfigChangeHandler;\n}\n\nexport const useSessionDataSource = (props?: SessionStateHookProps) => {\n const { VuuDataSource } = useData();\n\n const dataSourceConfigRef = useRef<DataSourceConfig | undefined>(undefined);\n\n const getDataSource = useCallback(\n (\n sessionKey: string,\n dataSourceConstructorProps?: DataSourceConstructorProps,\n ) => {\n let ds = sessionState.get(sessionKey);\n if (ds) {\n return ds;\n }\n\n if (dataSourceConstructorProps?.columns) {\n ds = new VuuDataSource({\n ...dataSourceConstructorProps,\n viewport: sessionKey,\n ...dataSourceConfigRef.current,\n });\n if (props?.onConfigChange) {\n ds.on(\"config\", props.onConfigChange);\n }\n sessionState.set(sessionKey, ds);\n return ds;\n } else {\n throw Error(\n `[useSessionDataSource] unable to create new DataSource, columns have not been defined `,\n );\n }\n },\n [VuuDataSource, props?.onConfigChange],\n );\n\n const clearDataSource = useCallback(\n (sessionKey: string, unsubscribe?: boolean) => {\n const ds = sessionState.get(sessionKey);\n if (ds) {\n sessionState.delete(sessionKey);\n if (unsubscribe === true) {\n ds.unsubscribe();\n }\n } else {\n console.warn(\n `[useSessionbDatasource] clearDataSource ${sessionKey} not found `,\n );\n }\n },\n [],\n );\n\n return {\n clearDataSource,\n getDataSource,\n };\n};\n"],"names":["useData","useRef","useCallback"],"mappings":";;;;;AASA,MAAM,YAAA,uBAAmB,GAAwB,EAAA;AAMpC,MAAA,oBAAA,GAAuB,CAAC,KAAkC,KAAA;AACrE,EAAM,MAAA,EAAE,aAAc,EAAA,GAAIA,gBAAQ,EAAA;AAElC,EAAM,MAAA,mBAAA,GAAsBC,aAAqC,KAAS,CAAA,CAAA;AAE1E,EAAA,MAAM,aAAgB,GAAAC,iBAAA;AAAA,IACpB,CACE,YACA,0BACG,KAAA;AACH,MAAI,IAAA,EAAA,GAAK,YAAa,CAAA,GAAA,CAAI,UAAU,CAAA;AACpC,MAAA,IAAI,EAAI,EAAA;AACN,QAAO,OAAA,EAAA;AAAA;AAGT,MAAA,IAAI,4BAA4B,OAAS,EAAA;AACvC,QAAA,EAAA,GAAK,IAAI,aAAc,CAAA;AAAA,UACrB,GAAG,0BAAA;AAAA,UACH,QAAU,EAAA,UAAA;AAAA,UACV,GAAG,mBAAoB,CAAA;AAAA,SACxB,CAAA;AACD,QAAA,IAAI,OAAO,cAAgB,EAAA;AACzB,UAAG,EAAA,CAAA,EAAA,CAAG,QAAU,EAAA,KAAA,CAAM,cAAc,CAAA;AAAA;AAEtC,QAAa,YAAA,CAAA,GAAA,CAAI,YAAY,EAAE,CAAA;AAC/B,QAAO,OAAA,EAAA;AAAA,OACF,MAAA;AACL,QAAM,MAAA,KAAA;AAAA,UACJ,CAAA,sFAAA;AAAA,SACF;AAAA;AACF,KACF;AAAA,IACA,CAAC,aAAe,EAAA,KAAA,EAAO,cAAc;AAAA,GACvC;AAEA,EAAA,MAAM,eAAkB,GAAAA,iBAAA;AAAA,IACtB,CAAC,YAAoB,WAA0B,KAAA;AAC7C,MAAM,MAAA,EAAA,GAAK,YAAa,CAAA,GAAA,CAAI,UAAU,CAAA;AACtC,MAAA,IAAI,EAAI,EAAA;AACN,QAAA,YAAA,CAAa,OAAO,UAAU,CAAA;AAC9B,QAAA,IAAI,gBAAgB,IAAM,EAAA;AACxB,UAAA,EAAA,CAAG,WAAY,EAAA;AAAA;AACjB,OACK,MAAA;AACL,QAAQ,OAAA,CAAA,IAAA;AAAA,UACN,2CAA2C,UAAU,CAAA,WAAA;AAAA,SACvD;AAAA;AACF,KACF;AAAA,IACA;AAAC,GACH;AAEA,EAAO,OAAA;AAAA,IACL,eAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
@@ -1,57 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
- var react = require('react');
5
-
6
- const getTypeaheadParams = (table, column, text = "", selectedValues = []) => {
7
- if (text !== "" && !selectedValues.includes(text.toLowerCase())) {
8
- return [table, column, text];
9
- }
10
- return [table, column];
11
- };
12
- const useTypeaheadSuggestions = () => {
13
- const dataSource = vuuUtils.useDataSource(false);
14
- return react.useCallback(
15
- async ([{ module, table }, column, starts]) => {
16
- if (dataSource === void 0) {
17
- console.warn(
18
- `[useTypeaheadSuggestions] no dataSource provided (use DataSourceProvider)`
19
- );
20
- return false;
21
- }
22
- const rpcMessage = starts === void 0 ? {
23
- params: {
24
- column,
25
- module,
26
- table
27
- },
28
- rpcName: "getUniqueFieldValues",
29
- type: "RPC_REQUEST"
30
- } : {
31
- params: {
32
- column,
33
- module,
34
- starts,
35
- table
36
- },
37
- rpcName: "getUniqueFieldValuesStartingWith",
38
- type: "RPC_REQUEST"
39
- };
40
- try {
41
- const response = await dataSource.rpcRequest?.(rpcMessage);
42
- if (response?.type === "SUCCESS_RESULT") {
43
- return response.data;
44
- } else {
45
- return false;
46
- }
47
- } catch (err) {
48
- return false;
49
- }
50
- },
51
- [dataSource]
52
- );
53
- };
54
-
55
- exports.getTypeaheadParams = getTypeaheadParams;
56
- exports.useTypeaheadSuggestions = useTypeaheadSuggestions;
57
- //# sourceMappingURL=useTypeaheadSuggestions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTypeaheadSuggestions.js","sources":["../../../../packages/vuu-data-react/src/hooks/useTypeaheadSuggestions.ts"],"sourcesContent":["import { SuggestionFetcher, TableSchemaTable } from \"@vuu-ui/vuu-data-types\";\nimport {\n TypeaheadParams,\n VuuRpcServiceRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { useDataSource } from \"@vuu-ui/vuu-utils\";\nimport { useCallback } from \"react\";\n\nexport const getTypeaheadParams = (\n table: TableSchemaTable,\n column: string,\n text = \"\",\n selectedValues: string[] = [],\n): TypeaheadParams => {\n if (text !== \"\" && !selectedValues.includes(text.toLowerCase())) {\n return [table, column, text];\n }\n return [table, column];\n};\n\nexport const useTypeaheadSuggestions = () => {\n const dataSource = useDataSource(false);\n return useCallback<SuggestionFetcher>(\n async ([{ module, table }, column, starts]: TypeaheadParams) => {\n if (dataSource === undefined) {\n console.warn(\n `[useTypeaheadSuggestions] no dataSource provided (use DataSourceProvider)`,\n );\n return false;\n }\n const rpcMessage: Omit<VuuRpcServiceRequest, \"context\"> =\n starts === undefined\n ? {\n params: {\n column,\n module,\n table,\n },\n rpcName: \"getUniqueFieldValues\",\n type: \"RPC_REQUEST\",\n }\n : {\n params: {\n column,\n module,\n starts,\n table,\n },\n rpcName: \"getUniqueFieldValuesStartingWith\",\n type: \"RPC_REQUEST\",\n };\n\n try {\n // We don't just return rpcCall . In the case of an\n // error we will be returning the rejected promise, bypassing\n // the catch block below.\n const response = await dataSource.rpcRequest?.(rpcMessage);\n if (response?.type === \"SUCCESS_RESULT\") {\n return response.data as string[];\n } else {\n return false;\n }\n } catch (err) {\n return false;\n }\n },\n [dataSource],\n );\n};\n"],"names":["useDataSource","useCallback"],"mappings":";;;;;AAQa,MAAA,kBAAA,GAAqB,CAChC,KACA,EAAA,MAAA,EACA,OAAO,EACP,EAAA,cAAA,GAA2B,EACP,KAAA;AACpB,EAAI,IAAA,IAAA,KAAS,MAAM,CAAC,cAAA,CAAe,SAAS,IAAK,CAAA,WAAA,EAAa,CAAG,EAAA;AAC/D,IAAO,OAAA,CAAC,KAAO,EAAA,MAAA,EAAQ,IAAI,CAAA;AAAA;AAE7B,EAAO,OAAA,CAAC,OAAO,MAAM,CAAA;AACvB;AAEO,MAAM,0BAA0B,MAAM;AAC3C,EAAM,MAAA,UAAA,GAAaA,uBAAc,KAAK,CAAA;AACtC,EAAO,OAAAC,iBAAA;AAAA,IACL,OAAO,CAAC,EAAE,MAAA,EAAQ,OAAS,EAAA,MAAA,EAAQ,MAAM,CAAuB,KAAA;AAC9D,MAAA,IAAI,eAAe,KAAW,CAAA,EAAA;AAC5B,QAAQ,OAAA,CAAA,IAAA;AAAA,UACN,CAAA,yEAAA;AAAA,SACF;AACA,QAAO,OAAA,KAAA;AAAA;AAET,MAAM,MAAA,UAAA,GACJ,WAAW,KACP,CAAA,GAAA;AAAA,QACE,MAAQ,EAAA;AAAA,UACN,MAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,OAAS,EAAA,sBAAA;AAAA,QACT,IAAM,EAAA;AAAA,OAER,GAAA;AAAA,QACE,MAAQ,EAAA;AAAA,UACN,MAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,OAAS,EAAA,kCAAA;AAAA,QACT,IAAM,EAAA;AAAA,OACR;AAEN,MAAI,IAAA;AAIF,QAAA,MAAM,QAAW,GAAA,MAAM,UAAW,CAAA,UAAA,GAAa,UAAU,CAAA;AACzD,QAAI,IAAA,QAAA,EAAU,SAAS,gBAAkB,EAAA;AACvC,UAAA,OAAO,QAAS,CAAA,IAAA;AAAA,SACX,MAAA;AACL,UAAO,OAAA,KAAA;AAAA;AACT,eACO,GAAK,EAAA;AACZ,QAAO,OAAA,KAAA;AAAA;AACT,KACF;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AACF;;;;;"}
@@ -1,84 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var vuuLayout = require('@vuu-ui/vuu-layout');
5
- var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
6
- var react = require('react');
7
-
8
- const useVisualLinks = (dataSource) => {
9
- const { dispatch } = vuuLayout.useViewContext();
10
- const clearVisualLinkTarget = react.useCallback(() => {
11
- if (dataSource.visualLink) {
12
- dispatch?.({
13
- type: "broadcast-message",
14
- message: {
15
- targetId: dataSource.visualLink.parentClientVpId,
16
- type: "highlight-off"
17
- }
18
- });
19
- }
20
- }, [dataSource, dispatch]);
21
- const removeVisualLink = react.useCallback(() => {
22
- if (dataSource.visualLink) {
23
- dispatch?.({
24
- type: "broadcast-message",
25
- message: {
26
- targetId: dataSource.visualLink.parentClientVpId,
27
- type: "highlight-off"
28
- }
29
- });
30
- dataSource.visualLink = void 0;
31
- }
32
- }, [dataSource, dispatch]);
33
- const handleLinkRemoved = react.useCallback(() => {
34
- dispatch?.({
35
- type: "remove-toolbar-contribution",
36
- location: "post-title"
37
- });
38
- }, [dispatch]);
39
- const highlightVisualLinkTarget = react.useCallback(() => {
40
- if (dataSource.visualLink) {
41
- dispatch?.({
42
- type: "broadcast-message",
43
- message: {
44
- targetId: dataSource.visualLink.parentClientVpId,
45
- type: "highlight-on"
46
- }
47
- });
48
- }
49
- }, [dataSource, dispatch]);
50
- const handleLinkCreated = react.useCallback(() => {
51
- dispatch?.({
52
- type: "add-toolbar-contribution",
53
- location: "post-title",
54
- content: /* @__PURE__ */ jsxRuntime.jsx(
55
- vuuUiControls.IconButton,
56
- {
57
- appearance: "transparent",
58
- "aria-label": "remove-link",
59
- icon: "link",
60
- onClick: removeVisualLink,
61
- onMouseEnter: highlightVisualLinkTarget,
62
- onMouseLeave: clearVisualLinkTarget,
63
- sentiment: "neutral"
64
- }
65
- )
66
- });
67
- }, [
68
- dispatch,
69
- removeVisualLink,
70
- highlightVisualLinkTarget,
71
- clearVisualLinkTarget
72
- ]);
73
- react.useEffect(() => {
74
- dataSource.on("visual-link-created", handleLinkCreated);
75
- dataSource.on("visual-link-removed", handleLinkRemoved);
76
- return () => {
77
- dataSource.removeListener("visual-link-created", handleLinkCreated);
78
- dataSource.removeListener("visual-link-removed", handleLinkRemoved);
79
- };
80
- }, [dataSource, handleLinkCreated, handleLinkRemoved]);
81
- };
82
-
83
- exports.useVisualLinks = useVisualLinks;
84
- //# sourceMappingURL=useVisualLinks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useVisualLinks.js","sources":["../../../../packages/vuu-data-react/src/hooks/useVisualLinks.tsx"],"sourcesContent":["import type { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport { useViewContext } from \"@vuu-ui/vuu-layout\";\nimport { IconButton } from \"@vuu-ui/vuu-ui-controls\";\nimport { useCallback, useEffect } from \"react\";\n\nexport const useVisualLinks = (dataSource: DataSource) => {\n const { dispatch } = useViewContext();\n\n const clearVisualLinkTarget = useCallback(() => {\n if (dataSource.visualLink) {\n dispatch?.({\n type: \"broadcast-message\",\n message: {\n targetId: dataSource.visualLink.parentClientVpId,\n type: \"highlight-off\",\n },\n });\n }\n }, [dataSource, dispatch]);\n\n const removeVisualLink = useCallback(() => {\n if (dataSource.visualLink) {\n dispatch?.({\n type: \"broadcast-message\",\n message: {\n targetId: dataSource.visualLink.parentClientVpId,\n type: \"highlight-off\",\n },\n });\n\n dataSource.visualLink = undefined;\n }\n }, [dataSource, dispatch]);\n\n const handleLinkRemoved = useCallback(() => {\n dispatch?.({\n type: \"remove-toolbar-contribution\",\n location: \"post-title\",\n });\n }, [dispatch]);\n\n const highlightVisualLinkTarget = useCallback(() => {\n if (dataSource.visualLink) {\n dispatch?.({\n type: \"broadcast-message\",\n message: {\n targetId: dataSource.visualLink.parentClientVpId,\n type: \"highlight-on\",\n },\n });\n }\n }, [dataSource, dispatch]);\n\n const handleLinkCreated = useCallback(() => {\n dispatch?.({\n type: \"add-toolbar-contribution\",\n location: \"post-title\",\n content: (\n <IconButton\n appearance=\"transparent\"\n aria-label=\"remove-link\"\n icon=\"link\"\n onClick={removeVisualLink}\n onMouseEnter={highlightVisualLinkTarget}\n onMouseLeave={clearVisualLinkTarget}\n sentiment=\"neutral\"\n />\n ),\n });\n }, [\n dispatch,\n removeVisualLink,\n highlightVisualLinkTarget,\n clearVisualLinkTarget,\n ]);\n\n useEffect(() => {\n dataSource.on(\"visual-link-created\", handleLinkCreated);\n dataSource.on(\"visual-link-removed\", handleLinkRemoved);\n return () => {\n dataSource.removeListener(\"visual-link-created\", handleLinkCreated);\n dataSource.removeListener(\"visual-link-removed\", handleLinkRemoved);\n };\n }, [dataSource, handleLinkCreated, handleLinkRemoved]);\n};\n"],"names":["useViewContext","useCallback","jsx","IconButton","useEffect"],"mappings":";;;;;;;AAKa,MAAA,cAAA,GAAiB,CAAC,UAA2B,KAAA;AACxD,EAAM,MAAA,EAAE,QAAS,EAAA,GAAIA,wBAAe,EAAA;AAEpC,EAAM,MAAA,qBAAA,GAAwBC,kBAAY,MAAM;AAC9C,IAAA,IAAI,WAAW,UAAY,EAAA;AACzB,MAAW,QAAA,GAAA;AAAA,QACT,IAAM,EAAA,mBAAA;AAAA,QACN,OAAS,EAAA;AAAA,UACP,QAAA,EAAU,WAAW,UAAW,CAAA,gBAAA;AAAA,UAChC,IAAM,EAAA;AAAA;AACR,OACD,CAAA;AAAA;AACH,GACC,EAAA,CAAC,UAAY,EAAA,QAAQ,CAAC,CAAA;AAEzB,EAAM,MAAA,gBAAA,GAAmBA,kBAAY,MAAM;AACzC,IAAA,IAAI,WAAW,UAAY,EAAA;AACzB,MAAW,QAAA,GAAA;AAAA,QACT,IAAM,EAAA,mBAAA;AAAA,QACN,OAAS,EAAA;AAAA,UACP,QAAA,EAAU,WAAW,UAAW,CAAA,gBAAA;AAAA,UAChC,IAAM,EAAA;AAAA;AACR,OACD,CAAA;AAED,MAAA,UAAA,CAAW,UAAa,GAAA,KAAA,CAAA;AAAA;AAC1B,GACC,EAAA,CAAC,UAAY,EAAA,QAAQ,CAAC,CAAA;AAEzB,EAAM,MAAA,iBAAA,GAAoBA,kBAAY,MAAM;AAC1C,IAAW,QAAA,GAAA;AAAA,MACT,IAAM,EAAA,6BAAA;AAAA,MACN,QAAU,EAAA;AAAA,KACX,CAAA;AAAA,GACH,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAM,MAAA,yBAAA,GAA4BA,kBAAY,MAAM;AAClD,IAAA,IAAI,WAAW,UAAY,EAAA;AACzB,MAAW,QAAA,GAAA;AAAA,QACT,IAAM,EAAA,mBAAA;AAAA,QACN,OAAS,EAAA;AAAA,UACP,QAAA,EAAU,WAAW,UAAW,CAAA,gBAAA;AAAA,UAChC,IAAM,EAAA;AAAA;AACR,OACD,CAAA;AAAA;AACH,GACC,EAAA,CAAC,UAAY,EAAA,QAAQ,CAAC,CAAA;AAEzB,EAAM,MAAA,iBAAA,GAAoBA,kBAAY,MAAM;AAC1C,IAAW,QAAA,GAAA;AAAA,MACT,IAAM,EAAA,0BAAA;AAAA,MACN,QAAU,EAAA,YAAA;AAAA,MACV,OACE,kBAAAC,cAAA;AAAA,QAACC,wBAAA;AAAA,QAAA;AAAA,UACC,UAAW,EAAA,aAAA;AAAA,UACX,YAAW,EAAA,aAAA;AAAA,UACX,IAAK,EAAA,MAAA;AAAA,UACL,OAAS,EAAA,gBAAA;AAAA,UACT,YAAc,EAAA,yBAAA;AAAA,UACd,YAAc,EAAA,qBAAA;AAAA,UACd,SAAU,EAAA;AAAA;AAAA;AACZ,KAEH,CAAA;AAAA,GACA,EAAA;AAAA,IACD,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,yBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAAC,eAAA,CAAU,MAAM;AACd,IAAW,UAAA,CAAA,EAAA,CAAG,uBAAuB,iBAAiB,CAAA;AACtD,IAAW,UAAA,CAAA,EAAA,CAAG,uBAAuB,iBAAiB,CAAA;AACtD,IAAA,OAAO,MAAM;AACX,MAAW,UAAA,CAAA,cAAA,CAAe,uBAAuB,iBAAiB,CAAA;AAClE,MAAW,UAAA,CAAA,cAAA,CAAe,uBAAuB,iBAAiB,CAAA;AAAA,KACpE;AAAA,GACC,EAAA,CAAC,UAAY,EAAA,iBAAA,EAAmB,iBAAiB,CAAC,CAAA;AACvD;;;;"}
@@ -1,352 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var core = require('@salt-ds/core');
5
- var vuuContextMenu = require('@vuu-ui/vuu-context-menu');
6
- var vuuFilterParser = require('@vuu-ui/vuu-filter-parser');
7
- var vuuNotifications = require('@vuu-ui/vuu-notifications');
8
- var vuuTable = require('@vuu-ui/vuu-table');
9
- var vuuUtils = require('@vuu-ui/vuu-utils');
10
- var react = require('react');
11
- var SessionEditingForm = require('../session-editing-form/SessionEditingForm.js');
12
- var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
13
-
14
- const isRoot = (menu) => menu.name === "ROOT";
15
- const isCellMenu = (options) => options.context === "cell";
16
- const isRowMenu = (options) => options.context === "row";
17
- const isSelectionMenu = (options) => options.context === "selected-rows";
18
- const isVuuMenuItem = (menu) => "rpcName" in menu;
19
- const isGroupMenuItem = (menu) => "menus" in menu;
20
- const hasFilter = ({ filter }) => typeof filter === "string" && filter.length > 0;
21
- const getMenuItemOptions = (menu, options) => {
22
- switch (menu.context) {
23
- case "cell":
24
- return {
25
- ...menu,
26
- field: options.column.name,
27
- rowKey: options.dataRow.key,
28
- value: options.dataRow[options.column.name]
29
- };
30
- case "row":
31
- return {
32
- ...menu,
33
- columns: options.columns,
34
- row: options.dataRow,
35
- rowKey: options.dataRow.key
36
- };
37
- case "selected-rows":
38
- return {
39
- ...menu,
40
- columns: options.columns
41
- };
42
- default:
43
- return menu;
44
- }
45
- };
46
- const vuuContextCompatibleWithTableLocation = (uiLocation, vuuContext, selectedRowCount = 0) => {
47
- switch (uiLocation) {
48
- case "grid":
49
- if (vuuContext === "selected-rows") {
50
- return selectedRowCount > 0;
51
- } else {
52
- return true;
53
- }
54
- case "header":
55
- return vuuContext === "grid";
56
- default:
57
- return false;
58
- }
59
- };
60
- const gridRowMeetsFilterCriteria = (context, dataRow, selectedRows, filter) => {
61
- if (context === "cell" || context === "row") {
62
- const filterPredicate = vuuFilterParser.getFilterPredicate(filter);
63
- return filterPredicate(dataRow);
64
- } else if (context === "selected-rows") {
65
- if (selectedRows.length === 0) {
66
- return false;
67
- } else {
68
- const filterPredicate = vuuFilterParser.getFilterPredicate(filter);
69
- return selectedRows.every(filterPredicate);
70
- }
71
- }
72
- return true;
73
- };
74
- const menuShouldBeRenderedInThisContext = (menuItem, tableLocation, options) => {
75
- if (isGroupMenuItem(menuItem)) {
76
- return menuItem.menus.some(
77
- (childMenu) => menuShouldBeRenderedInThisContext(childMenu, tableLocation, options)
78
- );
79
- }
80
- if (!vuuContextCompatibleWithTableLocation(
81
- tableLocation,
82
- menuItem.context,
83
- options.selectedRows?.length
84
- )) {
85
- return false;
86
- }
87
- if (tableLocation === "grid" && hasFilter(menuItem)) {
88
- return gridRowMeetsFilterCriteria(
89
- menuItem.context,
90
- options.dataRow,
91
- options.selectedRows,
92
- menuItem.filter
93
- );
94
- }
95
- if (isCellMenu(menuItem) && menuItem.field !== "*") {
96
- return menuItem.field === options.column.name;
97
- }
98
- return true;
99
- };
100
- const buildMenuDescriptorFromVuuMenu = (menu, tableLocation, options) => {
101
- if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {
102
- if (isVuuMenuItem(menu)) {
103
- return {
104
- label: menu.name,
105
- id: "MENU_RPC_CALL",
106
- options: getMenuItemOptions(menu, options)
107
- };
108
- } else {
109
- const children = menu.menus.map(
110
- (childMenu) => buildMenuDescriptorFromVuuMenu(childMenu, tableLocation, options)
111
- ).filter(
112
- (childMenu) => childMenu !== void 0
113
- );
114
- if (children.length > 0) {
115
- return {
116
- label: menu.name,
117
- children
118
- };
119
- }
120
- }
121
- }
122
- };
123
- const keyFirst = (c1, c2) => c1.isKeyField ? -1 : c2.isKeyField ? 1 : 0;
124
- const defaultFormConfig = {
125
- fields: [],
126
- key: "",
127
- title: ""
128
- };
129
- const configFromSchema = (schema) => {
130
- if (schema) {
131
- const { columns, key } = schema;
132
- return {
133
- key,
134
- title: `Parameters for command`,
135
- fields: columns.map((col) => ({
136
- description: col.name,
137
- label: col.name,
138
- name: col.name,
139
- type: col.serverDataType,
140
- isKeyField: col.name === key
141
- })).sort(keyFirst)
142
- };
143
- }
144
- };
145
- const getFormConfig = (action) => {
146
- const { tableSchema: schema } = action;
147
- const config = configFromSchema(schema) ?? defaultFormConfig;
148
- return {
149
- config,
150
- schema
151
- };
152
- };
153
- const useVuuMenuActions = ({
154
- clientSideMenuActionHandler,
155
- dataSource,
156
- onRpcResponse
157
- }) => {
158
- const { VuuDataSource } = vuuUtils.useData();
159
- const menuBuilder = react.useCallback(
160
- (location, options) => {
161
- const descriptors = [];
162
- if (dataSource) {
163
- const { links, menu } = dataSource;
164
- const { visualLink } = dataSource;
165
- if (location === "grid" && links && !visualLink) {
166
- links.forEach((linkDescriptor) => {
167
- const { link, label: linkLabel } = linkDescriptor;
168
- const label = linkLabel ? linkLabel : link.toTable;
169
- descriptors.push({
170
- label: `Link to ${label}`,
171
- id: "link-table",
172
- options: linkDescriptor
173
- });
174
- });
175
- }
176
- if (menu && vuuTable.isTableLocation(location)) {
177
- const menuDescriptor = buildMenuDescriptorFromVuuMenu(
178
- menu,
179
- location,
180
- options
181
- );
182
- if (isRoot(menu) && vuuContextMenu.isGroupMenuItemDescriptor(menuDescriptor)) {
183
- descriptors.push(...menuDescriptor.children);
184
- } else if (menuDescriptor) {
185
- descriptors.push(menuDescriptor);
186
- }
187
- }
188
- } else {
189
- throw Error("useVuuMenuActions no dataSource provided");
190
- }
191
- return descriptors;
192
- },
193
- [dataSource]
194
- );
195
- const { showDialog, closeDialog, showPrompt } = vuuUiControls.useModal();
196
- const { showNotification } = vuuNotifications.useNotifications();
197
- const showCustomComponentInDialog = react.useCallback(
198
- (componentId, ds, table) => {
199
- const sessionDs = new VuuDataSource({
200
- columns: ds.columns,
201
- table,
202
- viewport: table.table
203
- });
204
- const handleOpenChangePrompt = (open) => {
205
- if (!open) {
206
- ds.unsubscribe();
207
- }
208
- };
209
- const Component = vuuUtils.getLayoutComponent(componentId);
210
- showPrompt(/* @__PURE__ */ jsxRuntime.jsx(Component, { dataSource: sessionDs }), {
211
- title: "Confirm operation on selected rows",
212
- onOpenChange: handleOpenChangePrompt
213
- });
214
- },
215
- [VuuDataSource, showPrompt]
216
- );
217
- const showSessionEditingForm = react.useCallback(
218
- async (ds, action) => {
219
- const { tableSchema } = action;
220
- if (tableSchema) {
221
- const formConfig = getFormConfig(action);
222
- showDialog(
223
- /* @__PURE__ */ jsxRuntime.jsx(SessionEditingForm.SessionEditingForm, { ...formConfig, onClose: closeDialog }),
224
- "Set Parameters"
225
- );
226
- }
227
- const sessionDs = await ds.createSessionDataSource?.("All");
228
- const handleSubmit = () => {
229
- sessionDs?.rpcRequest?.({
230
- params: {
231
- save: true
232
- },
233
- rpcName: "endEditSession",
234
- type: "RPC_REQUEST"
235
- });
236
- closeDialog();
237
- };
238
- if (sessionDs) {
239
- showDialog(
240
- /* @__PURE__ */ jsxRuntime.jsx(
241
- vuuTable.BulkEditPanel,
242
- {
243
- sessionDs,
244
- onSubmit: handleSubmit,
245
- parentDs: ds
246
- }
247
- ),
248
- "Multi Row Edit",
249
- [
250
- /* @__PURE__ */ jsxRuntime.jsx(core.Button, { onClick: closeDialog, children: "Cancel" }, "cancel"),
251
- /* @__PURE__ */ jsxRuntime.jsx(core.Button, { onClick: handleSubmit, children: "Save" }, "submit")
252
- ]
253
- );
254
- }
255
- },
256
- [closeDialog, showDialog]
257
- );
258
- const getMenuRpcRequest = (options) => {
259
- const { rpcName } = options;
260
- if (isCellMenu(options)) {
261
- return {
262
- field: options.field,
263
- rowKey: options.rowKey,
264
- rpcName,
265
- value: options.value,
266
- type: "VIEW_PORT_MENU_CELL_RPC"
267
- };
268
- } else if (isRowMenu(options)) {
269
- return {
270
- rowKey: options.rowKey,
271
- row: options.row,
272
- rpcName,
273
- type: "VIEW_PORT_MENU_ROW_RPC"
274
- };
275
- } else if (isSelectionMenu(options)) {
276
- return {
277
- rpcName,
278
- type: "VIEW_PORT_MENUS_SELECT_RPC"
279
- };
280
- } else {
281
- return {
282
- rpcName,
283
- type: "VIEW_PORT_MENU_TABLE_RPC"
284
- };
285
- }
286
- };
287
- const menuActionHandler = react.useCallback(
288
- (menuItemId, options) => {
289
- if (clientSideMenuActionHandler?.(menuItemId, options)) {
290
- return true;
291
- } else if (menuItemId === "MENU_RPC_CALL") {
292
- const rpcRequest = getMenuRpcRequest(options);
293
- dataSource?.menuRpcCall(rpcRequest).then((rpcResponse) => {
294
- if (rpcResponse) {
295
- if (onRpcResponse?.(rpcResponse) === true) {
296
- return true;
297
- }
298
- if (vuuUtils.isActionMessage(rpcResponse)) {
299
- if (vuuContextMenu.hasShowNotificationAction(rpcResponse)) {
300
- const {
301
- action: { message, title = "Success" }
302
- } = rpcResponse;
303
- showNotification({
304
- status: "success",
305
- content: message,
306
- header: title,
307
- type: vuuNotifications.NotificationType.Toast
308
- });
309
- } else if (vuuUtils.isSessionTableActionMessage(rpcResponse)) {
310
- showSessionEditingForm(dataSource, rpcResponse.action);
311
- } else if (vuuUtils.isCustomComponentActionMessage(rpcResponse)) {
312
- showCustomComponentInDialog(
313
- rpcResponse.action.renderComponent,
314
- dataSource,
315
- rpcResponse.action.table
316
- );
317
- }
318
- }
319
- }
320
- });
321
- return true;
322
- } else if (menuItemId === "link-table") {
323
- if (dataSource) {
324
- dataSource.visualLink = options;
325
- }
326
- return true;
327
- } else {
328
- console.log(
329
- `useViewServer handleMenuAction, can't handle action type ${menuItemId}`
330
- );
331
- }
332
- return false;
333
- },
334
- [
335
- clientSideMenuActionHandler,
336
- dataSource,
337
- onRpcResponse,
338
- showCustomComponentInDialog,
339
- showNotification,
340
- showSessionEditingForm
341
- ]
342
- );
343
- return {
344
- menuBuilder,
345
- menuActionHandler
346
- };
347
- };
348
-
349
- exports.isRowMenu = isRowMenu;
350
- exports.isSelectionMenu = isSelectionMenu;
351
- exports.useVuuMenuActions = useVuuMenuActions;
352
- //# sourceMappingURL=useVuuMenuActions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useVuuMenuActions.js","sources":["../../../../packages/vuu-data-react/src/hooks/useVuuMenuActions.tsx"],"sourcesContent":["import { Button } from \"@salt-ds/core\";\nimport {\n type ContextMenuItemDescriptor,\n hasShowNotificationAction,\n isGroupMenuItemDescriptor,\n type MenuActionHandler,\n type MenuBuilder,\n} from \"@vuu-ui/vuu-context-menu\";\nimport {\n DataSource,\n DataSourceVisualLinkCreatedMessage,\n RpcResponseHandler,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport { getFilterPredicate } from \"@vuu-ui/vuu-filter-parser\";\nimport { NotificationType, useNotifications } from \"@vuu-ui/vuu-notifications\";\nimport type {\n ClientToServerMenuCellRPC,\n ClientToServerMenuRowRPC,\n LinkDescriptorWithLabel,\n OpenDialogAction,\n VuuDataRowDto,\n VuuMenu,\n VuuMenuContext,\n VuuMenuItem,\n VuuRowDataItemType,\n VuuRpcMenuRequest,\n VuuRpcResponse,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { BulkEditPanel, isTableLocation } from \"@vuu-ui/vuu-table\";\nimport type {\n ColumnDescriptor,\n DataRow,\n TableContextMenuDef,\n TableContextMenuOptions,\n TableMenuLocation,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n getLayoutComponent,\n isActionMessage,\n isCustomComponentActionMessage,\n isSessionTableActionMessage,\n useData,\n} from \"@vuu-ui/vuu-utils\";\nimport { useCallback } from \"react\";\nimport {\n FormConfig,\n FormFieldDescriptor,\n SessionEditingForm,\n} from \"../session-editing-form\";\nimport { useModal } from \"@vuu-ui/vuu-ui-controls\";\n\nexport interface MenuActionConfig {\n vuuMenu?: VuuMenu;\n visualLink?: DataSourceVisualLinkCreatedMessage;\n visualLinks?: LinkDescriptorWithLabel[];\n}\n\nexport interface VuuMenuActionHookProps {\n /**\n * By default, vuuMenuActions will be handled automatically. When activated, a\n * message will be sent to server and response will be handled here too.\n * This prop allows client to provide a custom handler for a menu Item. This will\n * take priority and if handler returns true, no further processing for the menu\n * item will be handled by Vuu. This can also be used to prevent an item from being\n * actioned, even when no custom handling is intended. If the handler returns false,\n * Vuu will process the menuItem.\n */\n clientSideMenuActionHandler?: MenuActionHandler;\n dataSource?: DataSource;\n menuActionConfig?: MenuActionConfig;\n onRpcResponse?: RpcResponseHandler;\n}\n\nexport interface VuuCellContextMenuItemOptions extends VuuMenuItem {\n rowKey: string;\n field: string;\n value: VuuRowDataItemType;\n}\nexport interface VuuRowContextMenuItemOptions extends VuuMenuItem {\n rowKey: string;\n row: VuuDataRowDto;\n}\nexport interface VuuSelectedRowsContextMenuItemOptions extends VuuMenuItem {\n columns: ColumnDescriptor[];\n}\n\nconst isRoot = (menu: VuuMenu) => menu.name === \"ROOT\";\n\nconst isCellMenu = (\n options: VuuMenuItem,\n): options is VuuCellContextMenuItemOptions => options.context === \"cell\";\n\nexport const isRowMenu = (\n options: VuuMenuItem,\n): options is VuuRowContextMenuItemOptions => options.context === \"row\";\n\nexport const isSelectionMenu = (\n options: VuuMenuItem,\n): options is VuuSelectedRowsContextMenuItemOptions =>\n options.context === \"selected-rows\";\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 getMenuItemOptions = (\n menu: VuuMenuItem,\n options: TableContextMenuOptions,\n) => {\n switch (menu.context) {\n case \"cell\":\n return {\n ...menu,\n field: options.column.name,\n rowKey: options.dataRow.key,\n value: options.dataRow[options.column.name],\n };\n case \"row\":\n return {\n ...menu,\n columns: options.columns,\n row: options.dataRow,\n rowKey: options.dataRow.key,\n };\n case \"selected-rows\":\n return {\n ...menu,\n columns: options.columns,\n };\n default:\n return menu;\n }\n};\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 dataRow: DataRow,\n selectedRows: DataRow[],\n filter: string,\n): boolean => {\n if (context === \"cell\" || context === \"row\") {\n const filterPredicate = getFilterPredicate(filter);\n return filterPredicate(dataRow);\n } else if (context === \"selected-rows\") {\n if (selectedRows.length === 0) {\n return false;\n } else {\n const filterPredicate = getFilterPredicate(filter);\n return selectedRows.every(filterPredicate);\n }\n }\n return true;\n};\n\nconst menuShouldBeRenderedInThisContext = (\n menuItem: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: TableContextMenuOptions,\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.dataRow,\n options.selectedRows,\n menuItem.filter,\n );\n }\n\n if (isCellMenu(menuItem) && menuItem.field !== \"*\") {\n return menuItem.field === options.column.name;\n }\n\n return true;\n};\n\nconst buildMenuDescriptorFromVuuMenu = (\n menu: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: TableContextMenuOptions,\n): ContextMenuItemDescriptor | undefined => {\n if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {\n if (isVuuMenuItem(menu)) {\n return {\n label: menu.name,\n id: \"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\nconst keyFirst = (c1: FormFieldDescriptor, c2: FormFieldDescriptor) =>\n c1.isKeyField ? -1 : c2.isKeyField ? 1 : 0;\n\nconst defaultFormConfig = {\n fields: [],\n key: \"\",\n title: \"\",\n};\n\nconst configFromSchema = (schema?: TableSchema): FormConfig | undefined => {\n if (schema) {\n const { columns, key } = schema;\n return {\n key,\n title: `Parameters for command`,\n fields: columns\n .map((col) => ({\n description: col.name,\n label: col.name,\n name: col.name,\n type: col.serverDataType,\n isKeyField: col.name === key,\n }))\n .sort(keyFirst),\n };\n }\n};\n\nconst getFormConfig = (\n action: OpenDialogAction & { tableSchema: TableSchema },\n) => {\n const { tableSchema: schema } = action;\n const config = configFromSchema(schema) ?? defaultFormConfig;\n\n return {\n config,\n schema,\n };\n};\n\nexport const useVuuMenuActions = ({\n clientSideMenuActionHandler,\n dataSource,\n onRpcResponse,\n}: VuuMenuActionHookProps): TableContextMenuDef => {\n const { VuuDataSource } = useData();\n const menuBuilder: MenuBuilder<TableMenuLocation, TableContextMenuOptions> =\n useCallback(\n (location, options) => {\n const descriptors: ContextMenuItemDescriptor[] = [];\n if (dataSource) {\n const { links, menu } = dataSource;\n const { visualLink } = dataSource;\n\n if (location === \"grid\" && links && !visualLink) {\n links.forEach((linkDescriptor: LinkDescriptorWithLabel) => {\n const { link, label: linkLabel } = linkDescriptor;\n const label = linkLabel ? linkLabel : link.toTable;\n descriptors.push({\n label: `Link to ${label}`,\n id: \"link-table\",\n options: linkDescriptor,\n });\n });\n }\n\n if (menu && isTableLocation(location)) {\n const menuDescriptor = buildMenuDescriptorFromVuuMenu(\n menu,\n location,\n options,\n );\n if (isRoot(menu) && isGroupMenuItemDescriptor(menuDescriptor)) {\n descriptors.push(...menuDescriptor.children);\n } else if (menuDescriptor) {\n descriptors.push(menuDescriptor);\n }\n }\n } else {\n throw Error(\"useVuuMenuActions no dataSource provided\");\n }\n\n return descriptors;\n },\n [dataSource],\n );\n\n const { showDialog, closeDialog, showPrompt } = useModal();\n const { showNotification } = useNotifications();\n\n const showCustomComponentInDialog = useCallback(\n (componentId: string, ds: DataSource, table: VuuTable) => {\n const sessionDs = new VuuDataSource({\n columns: ds.columns,\n table,\n viewport: table.table,\n });\n\n const handleOpenChangePrompt = (open: boolean) => {\n if (!open) {\n ds.unsubscribe();\n }\n };\n\n const Component = getLayoutComponent(componentId);\n showPrompt(<Component dataSource={sessionDs} />, {\n title: \"Confirm operation on selected rows\",\n onOpenChange: handleOpenChangePrompt,\n });\n },\n [VuuDataSource, showPrompt],\n );\n\n const showSessionEditingForm = useCallback(\n async (\n ds: DataSource,\n action: OpenDialogAction & { tableSchema: TableSchema },\n ) => {\n const { tableSchema } = action;\n if (tableSchema) {\n const formConfig = getFormConfig(action);\n showDialog(\n <SessionEditingForm {...formConfig} onClose={closeDialog} />,\n \"Set Parameters\",\n );\n }\n\n //will the tableSchema be different to ds?\n const sessionDs = await ds.createSessionDataSource?.('All');\n const handleSubmit = () => {\n sessionDs?.rpcRequest?.({\n params: {\n save: true,\n },\n rpcName: \"endEditSession\",\n type: \"RPC_REQUEST\",\n });\n closeDialog();\n };\n\n if (sessionDs) {\n showDialog(\n <BulkEditPanel\n sessionDs={sessionDs}\n onSubmit={handleSubmit}\n parentDs={ds}\n />,\n \"Multi Row Edit\",\n [\n <Button key=\"cancel\" onClick={closeDialog}>\n Cancel\n </Button>,\n <Button key=\"submit\" onClick={handleSubmit}>\n Save\n </Button>,\n ],\n );\n }\n },\n [closeDialog, showDialog],\n );\n\n const getMenuRpcRequest = (\n options: VuuMenuItem,\n ): Omit<VuuRpcMenuRequest, \"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<VuuRpcMenuRequest, \"vpId\">;\n } else {\n return {\n rpcName,\n type: \"VIEW_PORT_MENU_TABLE_RPC\",\n } as Omit<VuuRpcMenuRequest, \"vpId\">;\n }\n };\n\n const menuActionHandler = useCallback<MenuActionHandler>(\n (menuItemId, options) => {\n if (clientSideMenuActionHandler?.(menuItemId, options)) {\n return true;\n } else if (menuItemId === \"MENU_RPC_CALL\") {\n const rpcRequest = getMenuRpcRequest(options as VuuMenuItem);\n\n dataSource\n ?.menuRpcCall(rpcRequest)\n .then((rpcResponse: Omit<VuuRpcResponse, \"requestId\">) => {\n if (rpcResponse) {\n if (onRpcResponse?.(rpcResponse) === true) {\n return true;\n }\n if (isActionMessage(rpcResponse)) {\n if (hasShowNotificationAction(rpcResponse)) {\n const {\n action: { message, title = \"Success\" },\n } = rpcResponse;\n showNotification({\n status: \"success\",\n content: message,\n header: title,\n type: NotificationType.Toast,\n });\n } else if (isSessionTableActionMessage(rpcResponse)) {\n showSessionEditingForm(dataSource, rpcResponse.action);\n } else if (isCustomComponentActionMessage(rpcResponse)) {\n showCustomComponentInDialog(\n rpcResponse.action.renderComponent,\n dataSource,\n rpcResponse.action.table,\n );\n }\n }\n }\n });\n return true;\n } else if (menuItemId === \"link-table\") {\n if (dataSource) {\n dataSource.visualLink = options as LinkDescriptorWithLabel;\n }\n return true;\n } else {\n console.log(\n `useViewServer handleMenuAction, can't handle action type ${menuItemId}`,\n );\n }\n\n return false;\n },\n [\n clientSideMenuActionHandler,\n dataSource,\n onRpcResponse,\n showCustomComponentInDialog,\n showNotification,\n showSessionEditingForm,\n ],\n );\n\n return {\n menuBuilder,\n menuActionHandler,\n };\n};\n"],"names":["getFilterPredicate","useData","useCallback","isTableLocation","isGroupMenuItemDescriptor","useModal","useNotifications","getLayoutComponent","jsx","SessionEditingForm","BulkEditPanel","Button","isActionMessage","hasShowNotificationAction","NotificationType","isSessionTableActionMessage","isCustomComponentActionMessage"],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
- var react = require('react');
5
-
6
- const useVuuTables = () => {
7
- const [tableSchemas, setTableSchemas] = react.useState();
8
- const { getServerAPI } = vuuUtils.useData();
9
- const buildTables = react.useCallback((schemas) => {
10
- const vuuTables = /* @__PURE__ */ new Map();
11
- schemas.forEach((schema) => {
12
- const { module, table } = schema.table;
13
- vuuTables.set(`${module}:${table}`, schema);
14
- });
15
- return vuuTables;
16
- }, []);
17
- react.useEffect(() => {
18
- async function fetchTableMetadata() {
19
- try {
20
- const server = await getServerAPI();
21
- const { tables } = await server.getTableList();
22
- const tableSchemas2 = await Promise.all(
23
- tables.map((vuuTable) => server.getTableSchema(vuuTable))
24
- );
25
- setTableSchemas(tableSchemas2);
26
- } catch (err) {
27
- console.warn(
28
- `useVuuTables: error fetching table metadata ${String(err)}`
29
- );
30
- }
31
- }
32
- fetchTableMetadata();
33
- }, [buildTables, getServerAPI]);
34
- return tableSchemas;
35
- };
36
-
37
- exports.useVuuTables = useVuuTables;
38
- //# sourceMappingURL=useVuuTables.js.map