@vuu-ui/vuu-data-react 0.8.34 → 0.8.35

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 (32) hide show
  1. package/package.json +11 -13
  2. package/cjs/hooks/useDataSource.js +0 -148
  3. package/cjs/hooks/useDataSource.js.map +0 -1
  4. package/cjs/hooks/useLookupValues.js +0 -108
  5. package/cjs/hooks/useLookupValues.js.map +0 -1
  6. package/cjs/hooks/useServerConnectionQuality.js +0 -24
  7. package/cjs/hooks/useServerConnectionQuality.js.map +0 -1
  8. package/cjs/hooks/useServerConnectionStatus.js +0 -24
  9. package/cjs/hooks/useServerConnectionStatus.js.map +0 -1
  10. package/cjs/hooks/useTypeaheadSuggestions.js +0 -31
  11. package/cjs/hooks/useTypeaheadSuggestions.js.map +0 -1
  12. package/cjs/hooks/useVuuMenuActions.js +0 -213
  13. package/cjs/hooks/useVuuMenuActions.js.map +0 -1
  14. package/cjs/hooks/useVuuTables.js +0 -40
  15. package/cjs/hooks/useVuuTables.js.map +0 -1
  16. package/cjs/index.js.map +0 -1
  17. package/esm/hooks/useDataSource.js +0 -145
  18. package/esm/hooks/useDataSource.js.map +0 -1
  19. package/esm/hooks/useLookupValues.js +0 -105
  20. package/esm/hooks/useLookupValues.js.map +0 -1
  21. package/esm/hooks/useServerConnectionQuality.js +0 -22
  22. package/esm/hooks/useServerConnectionQuality.js.map +0 -1
  23. package/esm/hooks/useServerConnectionStatus.js +0 -22
  24. package/esm/hooks/useServerConnectionStatus.js.map +0 -1
  25. package/esm/hooks/useTypeaheadSuggestions.js +0 -28
  26. package/esm/hooks/useTypeaheadSuggestions.js.map +0 -1
  27. package/esm/hooks/useVuuMenuActions.js +0 -210
  28. package/esm/hooks/useVuuMenuActions.js.map +0 -1
  29. package/esm/hooks/useVuuTables.js +0 -37
  30. package/esm/hooks/useVuuTables.js.map +0 -1
  31. package/esm/index.js +0 -8
  32. package/esm/index.js.map +0 -1
package/package.json CHANGED
@@ -1,28 +1,26 @@
1
1
  {
2
- "version": "0.8.34",
2
+ "version": "0.8.35",
3
3
  "author": "heswell",
4
4
  "license": "Apache-2.0",
5
5
  "devDependencies": {
6
- "@vuu-ui/vuu-data-types": "0.8.34",
7
- "@vuu-ui/vuu-filter-types": "0.8.34",
8
- "@vuu-ui/vuu-popups": "0.8.34",
9
- "@vuu-ui/vuu-protocol-types": "0.8.34",
10
- "@vuu-ui/vuu-table-types": "0.8.34"
6
+ "@vuu-ui/vuu-data-types": "0.8.35",
7
+ "@vuu-ui/vuu-filter-types": "0.8.35",
8
+ "@vuu-ui/vuu-popups": "0.8.35",
9
+ "@vuu-ui/vuu-protocol-types": "0.8.35",
10
+ "@vuu-ui/vuu-table-types": "0.8.35"
11
11
  },
12
12
  "dependencies": {
13
- "@vuu-ui/vuu-data-remote": "0.8.34",
14
- "@vuu-ui/vuu-filter-parser": "0.8.34",
15
- "@vuu-ui/vuu-popups": "0.8.34",
16
- "@vuu-ui/vuu-shell": "0.8.34",
17
- "@vuu-ui/vuu-utils": "0.8.34"
13
+ "@vuu-ui/vuu-data-remote": "0.8.35",
14
+ "@vuu-ui/vuu-filter-parser": "0.8.35",
15
+ "@vuu-ui/vuu-popups": "0.8.35",
16
+ "@vuu-ui/vuu-shell": "0.8.35",
17
+ "@vuu-ui/vuu-utils": "0.8.35"
18
18
  },
19
19
  "peerDependencies": {
20
20
  "react": ">=17.0.2",
21
21
  "react-dom": ">=17.0.2"
22
22
  },
23
23
  "files": [
24
- "esm",
25
- "cjs",
26
24
  "README.md",
27
25
  "/types"
28
26
  ],
@@ -1,148 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuUtils = require('@vuu-ui/vuu-utils');
4
- var react = require('react');
5
-
6
- const { SELECTED } = vuuUtils.metadataKeys;
7
- function useDataSource({
8
- dataSource,
9
- renderBufferSize = 10
10
- }) {
11
- const [, forceUpdate] = react.useState(null);
12
- const isMounted = react.useRef(true);
13
- const hasUpdated = react.useRef(false);
14
- const rafHandle = react.useRef(null);
15
- const data = react.useRef([]);
16
- const rangeRef = react.useRef({ from: 0, to: 10 });
17
- const dataWindow = react.useMemo(
18
- () => new MovingWindow(vuuUtils.getFullRange(rangeRef.current, renderBufferSize)),
19
- [renderBufferSize]
20
- );
21
- const setData = react.useCallback(
22
- (updates) => {
23
- for (const row of updates) {
24
- dataWindow.add(row);
25
- }
26
- data.current = dataWindow.data.slice();
27
- hasUpdated.current = true;
28
- },
29
- [dataWindow]
30
- );
31
- const datasourceMessageHandler = react.useCallback(
32
- (message) => {
33
- if (message.type === "viewport-update") {
34
- if (message.size !== void 0) {
35
- dataWindow.setRowCount(message.size);
36
- }
37
- if (message.rows) {
38
- setData(message.rows);
39
- forceUpdate({});
40
- } else if (message.size !== void 0) {
41
- data.current = dataWindow.data.slice();
42
- hasUpdated.current = true;
43
- }
44
- }
45
- },
46
- [dataWindow, setData]
47
- );
48
- react.useEffect(
49
- () => () => {
50
- if (rafHandle.current) {
51
- cancelAnimationFrame(rafHandle.current);
52
- rafHandle.current = null;
53
- }
54
- isMounted.current = false;
55
- },
56
- []
57
- );
58
- const setRange = react.useCallback(
59
- (range) => {
60
- rangeRef.current = range;
61
- const fullRange = vuuUtils.getFullRange(rangeRef.current, renderBufferSize);
62
- dataSource.range = fullRange;
63
- dataWindow.setRange(fullRange.from, fullRange.to);
64
- },
65
- [dataSource, dataWindow, renderBufferSize]
66
- );
67
- react.useMemo(() => {
68
- const { from, to } = rangeRef.current;
69
- const fullRange = vuuUtils.getFullRange({ from, to }, renderBufferSize);
70
- dataSource.range = fullRange;
71
- dataWindow.setRange(fullRange.from, fullRange.to);
72
- }, [dataSource, dataWindow, renderBufferSize]);
73
- react.useEffect(() => {
74
- const { from, to } = vuuUtils.getFullRange(rangeRef.current, renderBufferSize);
75
- dataSource.subscribe(
76
- {
77
- range: { from, to }
78
- },
79
- datasourceMessageHandler
80
- );
81
- }, [dataSource, datasourceMessageHandler, renderBufferSize]);
82
- react.useEffect(
83
- () => () => {
84
- dataSource.unsubscribe();
85
- },
86
- [dataSource]
87
- );
88
- return [
89
- data.current,
90
- dataWindow.rowCount,
91
- vuuUtils.getFullRange(rangeRef.current, renderBufferSize),
92
- setRange
93
- ];
94
- }
95
- class MovingWindow {
96
- constructor({ from, to }) {
97
- this.rowCount = 0;
98
- this.setRowCount = (rowCount) => {
99
- if (rowCount < this.data.length) {
100
- this.data.length = rowCount;
101
- }
102
- this.rowCount = rowCount;
103
- };
104
- this.range = new vuuUtils.WindowRange(from, to);
105
- this.data = new Array(to - from);
106
- }
107
- add(data) {
108
- const [index] = data;
109
- if (this.isWithinRange(index)) {
110
- const internalIndex = index - this.range.from;
111
- this.data[internalIndex] = data;
112
- if (this.data[internalIndex - 1]) {
113
- if (this.data[internalIndex - 1][SELECTED] === 1 && data[SELECTED] === 0) {
114
- data[SELECTED] = 2;
115
- }
116
- }
117
- if (index === this.rowCount - 1) {
118
- this.data.length = internalIndex + 1;
119
- }
120
- }
121
- }
122
- getAtIndex(index) {
123
- return this.range.isWithin(index) && this.data[index - this.range.from] != null ? this.data[index - this.range.from] : void 0;
124
- }
125
- isWithinRange(index) {
126
- return this.range.isWithin(index);
127
- }
128
- setRange(from, to) {
129
- if (from !== this.range.from || to !== this.range.to) {
130
- const [overlapFrom, overlapTo] = this.range.overlap(from, to);
131
- const newData = new Array(to - from);
132
- for (let i = overlapFrom; i < overlapTo; i++) {
133
- const data = this.getAtIndex(i);
134
- if (data) {
135
- const index = i - from;
136
- newData[index] = data;
137
- }
138
- }
139
- this.data = newData;
140
- this.range.from = from;
141
- this.range.to = to;
142
- }
143
- }
144
- }
145
-
146
- exports.MovingWindow = MovingWindow;
147
- exports.useDataSource = useDataSource;
148
- //# sourceMappingURL=useDataSource.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDataSource.js","sources":["../../src/hooks/useDataSource.ts"],"sourcesContent":["// TODO is this hook needed ? it is currently used only in a vuu salt story\nimport type {\n DataSource,\n DataSourceRow,\n SubscribeCallback,\n} from \"@vuu-ui/vuu-data-types\";\nimport type { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { getFullRange, metadataKeys, WindowRange } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst { SELECTED } = metadataKeys;\n\nexport interface DataSourceHookProps {\n dataSource: DataSource;\n renderBufferSize?: number;\n}\n\nexport function useDataSource({\n dataSource,\n renderBufferSize = 10,\n}: DataSourceHookProps): [\n DataSourceRow[],\n number,\n VuuRange,\n (range: VuuRange) => void\n] {\n const [, forceUpdate] = useState<object | null>(null);\n const isMounted = useRef(true);\n const hasUpdated = useRef(false);\n const rafHandle = useRef(null);\n const data = useRef<DataSourceRow[]>([]);\n const rangeRef = useRef({ from: 0, to: 10 });\n\n const dataWindow = useMemo(\n () => new MovingWindow(getFullRange(rangeRef.current, renderBufferSize)),\n [renderBufferSize]\n );\n\n const setData = useCallback(\n (updates: DataSourceRow[]) => {\n for (const row of updates) {\n dataWindow.add(row);\n }\n // Why bother with the slice ?\n data.current = dataWindow.data.slice();\n\n hasUpdated.current = true;\n },\n [dataWindow]\n );\n\n const datasourceMessageHandler: SubscribeCallback = useCallback(\n (message) => {\n if (message.type === \"viewport-update\") {\n if (message.size !== undefined) {\n dataWindow.setRowCount(message.size);\n }\n if (message.rows) {\n setData(message.rows);\n forceUpdate({});\n } else if (message.size !== undefined) {\n // TODO is this right ?\n data.current = dataWindow.data.slice();\n hasUpdated.current = true;\n }\n }\n },\n [dataWindow, setData]\n );\n\n useEffect(\n () => () => {\n if (rafHandle.current) {\n cancelAnimationFrame(rafHandle.current);\n rafHandle.current = null;\n }\n isMounted.current = false;\n },\n []\n );\n\n const setRange = useCallback(\n (range) => {\n rangeRef.current = range;\n const fullRange = getFullRange(rangeRef.current, renderBufferSize);\n dataSource.range = fullRange;\n dataWindow.setRange(fullRange.from, fullRange.to);\n },\n [dataSource, dataWindow, renderBufferSize]\n );\n\n useMemo(() => {\n const { from, to } = rangeRef.current;\n const fullRange = getFullRange({ from, to }, renderBufferSize);\n dataSource.range = fullRange;\n dataWindow.setRange(fullRange.from, fullRange.to);\n }, [dataSource, dataWindow, renderBufferSize]);\n\n useEffect(() => {\n const { from, to } = getFullRange(rangeRef.current, renderBufferSize);\n dataSource.subscribe(\n {\n range: { from, to },\n },\n datasourceMessageHandler\n );\n }, [dataSource, datasourceMessageHandler, renderBufferSize]);\n\n useEffect(\n () => () => {\n dataSource.unsubscribe();\n },\n [dataSource]\n );\n\n return [\n data.current,\n dataWindow.rowCount,\n getFullRange(rangeRef.current, renderBufferSize),\n setRange,\n ];\n}\n\nexport class MovingWindow {\n public data: DataSourceRow[];\n public rowCount = 0;\n private range: WindowRange;\n\n constructor({ from, to }: VuuRange) {\n this.range = new WindowRange(from, to);\n this.data = new Array(to - from);\n }\n\n setRowCount = (rowCount: number) => {\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n add(data: DataSourceRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n this.data[internalIndex] = data;\n if (this.data[internalIndex - 1]) {\n // assign 'post-selected' selection state\n if (\n this.data[internalIndex - 1][SELECTED] === 1 &&\n data[SELECTED] === 0\n ) {\n data[SELECTED] = 2;\n }\n }\n if (index === this.rowCount - 1) {\n this.data.length = internalIndex + 1;\n }\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index);\n }\n\n setRange(from: number, to: number) {\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n}\n"],"names":["metadataKeys","useState","useRef","useMemo","getFullRange","useCallback","useEffect","WindowRange"],"mappings":"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"}
@@ -1,108 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuDataRemote = require('@vuu-ui/vuu-data-remote');
4
- var vuuShell = require('@vuu-ui/vuu-shell');
5
- var vuuUtils = require('@vuu-ui/vuu-utils');
6
- var react = require('react');
7
-
8
- const NO_VALUES = [];
9
- const toListOption = (value) => ({
10
- label: value,
11
- value
12
- });
13
- const lookupValueMap = /* @__PURE__ */ new Map();
14
- const loadLookupValues = ({
15
- labelColumn,
16
- table,
17
- valueColumn
18
- }) => {
19
- const tableKey = `${table.module}:${table.table}`;
20
- const lookupValues = lookupValueMap.get(tableKey);
21
- if (lookupValues) {
22
- return lookupValues;
23
- } else {
24
- const promise = new Promise((resolve) => {
25
- const columns = [valueColumn, labelColumn];
26
- const columnMap = vuuUtils.buildColumnMap(columns);
27
- const dataSource = new vuuDataRemote.VuuDataSource({
28
- bufferSize: 0,
29
- table
30
- });
31
- dataSource.subscribe(
32
- {
33
- columns,
34
- range: { from: 0, to: 100 }
35
- },
36
- (message) => {
37
- if (message.type === "viewport-update") {
38
- if (message.rows) {
39
- const listOptions = message.rows.map((row) => ({
40
- value: row[columnMap[valueColumn]],
41
- label: row[columnMap[labelColumn]]
42
- }));
43
- resolve(listOptions);
44
- dataSource.unsubscribe();
45
- }
46
- }
47
- }
48
- );
49
- });
50
- lookupValueMap.set(tableKey, promise);
51
- return promise;
52
- }
53
- };
54
- const getSelectedOption = (values, selectedValue) => {
55
- if (selectedValue === void 0) {
56
- return null;
57
- }
58
- return values.find((option) => option.value === selectedValue) ?? null;
59
- };
60
- const getLookupDetails = ({ name, type }) => {
61
- if (vuuUtils.isTypeDescriptor(type) && vuuUtils.isLookupRenderer(type.renderer)) {
62
- return type.renderer.lookup;
63
- } else {
64
- throw Error(
65
- `useLookupValues column ${name} is not configured to use lookup values`
66
- );
67
- }
68
- };
69
- const useLookupValues = (column, initialValueProp) => {
70
- const { type: columnType } = column;
71
- const { getLookupValues } = vuuShell.useShellContext();
72
- const initialState = react.useMemo(() => {
73
- if (vuuUtils.isTypeDescriptor(columnType) && vuuUtils.isValueListRenderer(columnType?.renderer)) {
74
- const values2 = columnType.renderer.values.map(toListOption);
75
- return {
76
- initialValue: getSelectedOption(values2, initialValueProp),
77
- values: values2
78
- };
79
- } else {
80
- const lookupDetails = getLookupDetails(column);
81
- const values2 = getLookupValues?.(lookupDetails.table) ?? NO_VALUES;
82
- return {
83
- initialValue: getSelectedOption(values2, initialValueProp),
84
- values: values2
85
- };
86
- }
87
- }, [column, columnType, getLookupValues, initialValueProp]);
88
- const [{ initialValue, values }, setLookupState] = react.useState(initialState);
89
- react.useMemo(() => {
90
- if (values === NO_VALUES) {
91
- const lookupDetails = getLookupDetails(column);
92
- loadLookupValues(lookupDetails).then(
93
- (values2) => setLookupState({
94
- initialValue: getSelectedOption(values2, initialValueProp),
95
- values: values2
96
- })
97
- );
98
- }
99
- }, [values, column, initialValueProp]);
100
- return {
101
- initialValue,
102
- values
103
- };
104
- };
105
-
106
- exports.getSelectedOption = getSelectedOption;
107
- exports.useLookupValues = useLookupValues;
108
- //# sourceMappingURL=useLookupValues.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useLookupValues.js","sources":["../../src/hooks/useLookupValues.ts"],"sourcesContent":["import {\n ColumnDescriptor,\n ListOption,\n LookupTableDetails,\n} from \"@vuu-ui/vuu-table-types\";\nimport { VuuDataSource } from \"@vuu-ui/vuu-data-remote\";\nimport { useShellContext } from \"@vuu-ui/vuu-shell\";\nimport {\n buildColumnMap,\n isLookupRenderer,\n isTypeDescriptor,\n isValueListRenderer,\n} from \"@vuu-ui/vuu-utils\";\nimport { useMemo, useState } from \"react\";\n\nconst NO_VALUES: ListOption[] = [];\n\nconst toListOption = (value: string): ListOption => ({\n label: value,\n value,\n});\n\nconst lookupValueMap = new Map<string, Promise<ListOption[]>>();\n\nconst loadLookupValues = ({\n labelColumn,\n table,\n valueColumn,\n}: LookupTableDetails): Promise<ListOption[]> => {\n const tableKey = `${table.module}:${table.table}`;\n const lookupValues = lookupValueMap.get(tableKey);\n if (lookupValues) {\n return lookupValues;\n } else {\n const promise: Promise<ListOption[]> = new Promise((resolve) => {\n const columns = [valueColumn, labelColumn];\n const columnMap = buildColumnMap(columns);\n const dataSource = new VuuDataSource({\n bufferSize: 0,\n table,\n });\n dataSource.subscribe(\n {\n columns,\n range: { from: 0, to: 100 },\n },\n (message) => {\n if (message.type === \"viewport-update\") {\n //TODO check we have full dataset\n if (message.rows) {\n const listOptions = message.rows.map<ListOption>((row) => ({\n value: row[columnMap[valueColumn]] as string | number,\n label: row[columnMap[labelColumn]] as string,\n }));\n resolve(listOptions);\n dataSource.unsubscribe();\n }\n }\n }\n );\n });\n lookupValueMap.set(tableKey, promise);\n return promise;\n }\n};\n\ntype LookupState = {\n initialValue: ListOption | null;\n values: ListOption[];\n};\n\nexport const getSelectedOption = (\n values: ListOption[],\n selectedValue: string | number | undefined\n) => {\n if (selectedValue === undefined) {\n return null;\n }\n return values.find((option) => option.value === selectedValue) ?? null;\n};\n\nconst getLookupDetails = ({ name, type }: ColumnDescriptor) => {\n if (isTypeDescriptor(type) && isLookupRenderer(type.renderer)) {\n return type.renderer.lookup;\n } else {\n throw Error(\n `useLookupValues column ${name} is not configured to use lookup values`\n );\n }\n};\n\nexport const useLookupValues = (\n column: ColumnDescriptor,\n initialValueProp: number | string\n) => {\n const { type: columnType } = column;\n const { getLookupValues } = useShellContext();\n\n const initialState = useMemo<LookupState>(() => {\n if (\n isTypeDescriptor(columnType) &&\n isValueListRenderer(columnType?.renderer)\n ) {\n const values = columnType.renderer.values.map(toListOption);\n return {\n initialValue: getSelectedOption(values, initialValueProp),\n values,\n };\n } else {\n const lookupDetails = getLookupDetails(column);\n const values = getLookupValues?.(lookupDetails.table) ?? NO_VALUES;\n\n return {\n initialValue: getSelectedOption(values, initialValueProp),\n values,\n };\n }\n }, [column, columnType, getLookupValues, initialValueProp]);\n\n const [{ initialValue, values }, setLookupState] =\n useState<LookupState>(initialState);\n\n useMemo(() => {\n if (values === NO_VALUES) {\n const lookupDetails = getLookupDetails(column);\n loadLookupValues(lookupDetails).then((values) =>\n setLookupState({\n initialValue: getSelectedOption(values, initialValueProp),\n values,\n })\n );\n }\n }, [values, column, initialValueProp]);\n\n return {\n initialValue,\n values,\n };\n};\n"],"names":["buildColumnMap","VuuDataSource","isTypeDescriptor","isLookupRenderer","useShellContext","useMemo","isValueListRenderer","values","useState"],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
- var vuuDataRemote = require('@vuu-ui/vuu-data-remote');
5
-
6
- const useServerConnectionQuality = () => {
7
- const [messagesPerSecond, setMessagesPerSecond] = react.useState(0);
8
- const handleConnectivityMessage = react.useCallback(({ messages }) => {
9
- setMessagesPerSecond(messages.messagesLength);
10
- }, []);
11
- react.useEffect(() => {
12
- vuuDataRemote.ConnectionManager.on("connection-metrics", handleConnectivityMessage);
13
- return () => {
14
- vuuDataRemote.ConnectionManager.removeListener(
15
- "connection-metrics",
16
- handleConnectivityMessage
17
- );
18
- };
19
- }, [handleConnectivityMessage]);
20
- return messagesPerSecond;
21
- };
22
-
23
- exports.useServerConnectionQuality = useServerConnectionQuality;
24
- //# sourceMappingURL=useServerConnectionQuality.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useServerConnectionQuality.js","sources":["../../src/hooks/useServerConnectionQuality.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { ConnectionManager } from \"@vuu-ui/vuu-data-remote\";\n\nexport const useServerConnectionQuality = () => {\n const [messagesPerSecond, setMessagesPerSecond] = useState<number>(0);\n const handleConnectivityMessage = useCallback(({ messages }) => {\n setMessagesPerSecond(messages.messagesLength);\n }, []);\n\n useEffect(() => {\n ConnectionManager.on(\"connection-metrics\", handleConnectivityMessage);\n return () => {\n ConnectionManager.removeListener(\n \"connection-metrics\",\n handleConnectivityMessage\n );\n };\n }, [handleConnectivityMessage]);\n\n return messagesPerSecond;\n};\n"],"names":["useState","useCallback","useEffect","ConnectionManager"],"mappings":";;;;;AAGO,MAAM,6BAA6B,MAAM;AAC9C,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,eAAiB,CAAC,CAAA,CAAA;AACpE,EAAA,MAAM,yBAA4B,GAAAC,iBAAA,CAAY,CAAC,EAAE,UAAe,KAAA;AAC9D,IAAA,oBAAA,CAAqB,SAAS,cAAc,CAAA,CAAA;AAAA,GAC9C,EAAG,EAAE,CAAA,CAAA;AAEL,EAAAC,eAAA,CAAU,MAAM;AACd,IAAkBC,+BAAA,CAAA,EAAA,CAAG,sBAAsB,yBAAyB,CAAA,CAAA;AACpE,IAAA,OAAO,MAAM;AACX,MAAkBA,+BAAA,CAAA,cAAA;AAAA,QAChB,oBAAA;AAAA,QACA,yBAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA;AAAA,GACF,EAAG,CAAC,yBAAyB,CAAC,CAAA,CAAA;AAE9B,EAAO,OAAA,iBAAA,CAAA;AACT;;;;"}
@@ -1,24 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
- var vuuDataRemote = require('@vuu-ui/vuu-data-remote');
5
-
6
- const useServerConnectionStatus = () => {
7
- const [connectionStatus, setConnectionStatus] = react.useState("disconnected");
8
- const handleStatusChange = react.useCallback(
9
- ({ status }) => {
10
- setConnectionStatus(status);
11
- },
12
- []
13
- );
14
- react.useEffect(() => {
15
- vuuDataRemote.ConnectionManager.on("connection-status", handleStatusChange);
16
- return () => {
17
- vuuDataRemote.ConnectionManager.removeListener("connection-status", handleStatusChange);
18
- };
19
- }, [handleStatusChange]);
20
- return connectionStatus;
21
- };
22
-
23
- exports.useServerConnectionStatus = useServerConnectionStatus;
24
- //# sourceMappingURL=useServerConnectionStatus.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useServerConnectionStatus.js","sources":["../../src/hooks/useServerConnectionStatus.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { ConnectionManager } from \"@vuu-ui/vuu-data-remote\";\nimport { ConnectionStatusMessage } from \"@vuu-ui/vuu-data-types\";\n\nexport const useServerConnectionStatus = () => {\n const [connectionStatus, setConnectionStatus] = useState(\"disconnected\");\n\n const handleStatusChange = useCallback(\n ({ status }: ConnectionStatusMessage) => {\n setConnectionStatus(status);\n },\n []\n );\n\n useEffect(() => {\n ConnectionManager.on(\"connection-status\", handleStatusChange);\n return () => {\n ConnectionManager.removeListener(\"connection-status\", handleStatusChange);\n };\n }, [handleStatusChange]);\n\n return connectionStatus;\n};\n"],"names":["useState","useCallback","useEffect","ConnectionManager"],"mappings":";;;;;AAIO,MAAM,4BAA4B,MAAM;AAC7C,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,eAAS,cAAc,CAAA,CAAA;AAEvE,EAAA,MAAM,kBAAqB,GAAAC,iBAAA;AAAA,IACzB,CAAC,EAAE,MAAA,EAAsC,KAAA;AACvC,MAAA,mBAAA,CAAoB,MAAM,CAAA,CAAA;AAAA,KAC5B;AAAA,IACA,EAAC;AAAA,GACH,CAAA;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAkBC,+BAAA,CAAA,EAAA,CAAG,qBAAqB,kBAAkB,CAAA,CAAA;AAC5D,IAAA,OAAO,MAAM;AACX,MAAkBA,+BAAA,CAAA,cAAA,CAAe,qBAAqB,kBAAkB,CAAA,CAAA;AAAA,KAC1E,CAAA;AAAA,GACF,EAAG,CAAC,kBAAkB,CAAC,CAAA,CAAA;AAEvB,EAAO,OAAA,gBAAA,CAAA;AACT;;;;"}
@@ -1,31 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuDataRemote = require('@vuu-ui/vuu-data-remote');
4
- var react = require('react');
5
-
6
- const TYPEAHEAD_MESSAGE_CONSTANTS = {
7
- type: "RPC_CALL",
8
- service: "TypeAheadRpcHandler"
9
- };
10
- const getTypeaheadParams = (table, column, text = "", selectedValues = []) => {
11
- if (text !== "" && !selectedValues.includes(text.toLowerCase())) {
12
- return [table, column, text];
13
- }
14
- return [table, column];
15
- };
16
- const useTypeaheadSuggestions = () => react.useCallback(async (params) => {
17
- const rpcMessage = params.length === 2 ? {
18
- method: "getUniqueFieldValues",
19
- params,
20
- ...TYPEAHEAD_MESSAGE_CONSTANTS
21
- } : {
22
- method: "getUniqueFieldValuesStartingWith",
23
- params,
24
- ...TYPEAHEAD_MESSAGE_CONSTANTS
25
- };
26
- return vuuDataRemote.makeRpcCall(rpcMessage);
27
- }, []);
28
-
29
- exports.getTypeaheadParams = getTypeaheadParams;
30
- exports.useTypeaheadSuggestions = useTypeaheadSuggestions;
31
- //# sourceMappingURL=useTypeaheadSuggestions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTypeaheadSuggestions.js","sources":["../../src/hooks/useTypeaheadSuggestions.ts"],"sourcesContent":["import { makeRpcCall } from \"@vuu-ui/vuu-data-remote\";\nimport { SuggestionFetcher, TableSchemaTable } from \"@vuu-ui/vuu-data-types\";\nimport {\n ClientToServerGetUniqueValues,\n ClientToServerGetUniqueValuesStartingWith,\n TypeaheadParams,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { useCallback } from \"react\";\n\n// const SPECIAL_SPACE = \"_\";\nconst TYPEAHEAD_MESSAGE_CONSTANTS = {\n type: \"RPC_CALL\",\n service: \"TypeAheadRpcHandler\",\n};\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 useCallback<SuggestionFetcher>(async (params: TypeaheadParams) => {\n const rpcMessage =\n params.length === 2\n ? ({\n method: \"getUniqueFieldValues\",\n params,\n ...TYPEAHEAD_MESSAGE_CONSTANTS,\n } as ClientToServerGetUniqueValues)\n : ({\n method: \"getUniqueFieldValuesStartingWith\",\n params,\n ...TYPEAHEAD_MESSAGE_CONSTANTS,\n } as ClientToServerGetUniqueValuesStartingWith);\n return makeRpcCall<string[]>(rpcMessage);\n }, []);\n"],"names":["useCallback","makeRpcCall"],"mappings":";;;;;AAUA,MAAM,2BAA8B,GAAA;AAAA,EAClC,IAAM,EAAA,UAAA;AAAA,EACN,OAAS,EAAA,qBAAA;AACX,CAAA,CAAA;AAEa,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,CAAA;AAAA,GAC7B;AACA,EAAO,OAAA,CAAC,OAAO,MAAM,CAAA,CAAA;AACvB,EAAA;AAEO,MAAM,uBAA0B,GAAA,MACrCA,iBAA+B,CAAA,OAAO,MAA4B,KAAA;AAChE,EAAM,MAAA,UAAA,GACJ,MAAO,CAAA,MAAA,KAAW,CACb,GAAA;AAAA,IACC,MAAQ,EAAA,sBAAA;AAAA,IACR,MAAA;AAAA,IACA,GAAG,2BAAA;AAAA,GAEJ,GAAA;AAAA,IACC,MAAQ,EAAA,kCAAA;AAAA,IACR,MAAA;AAAA,IACA,GAAG,2BAAA;AAAA,GACL,CAAA;AACN,EAAA,OAAOC,0BAAsB,UAAU,CAAA,CAAA;AACzC,CAAA,EAAG,EAAE;;;;;"}
@@ -1,213 +0,0 @@
1
- 'use strict';
2
-
3
- var vuuFilterParser = require('@vuu-ui/vuu-filter-parser');
4
- var vuuUtils = require('@vuu-ui/vuu-utils');
5
- var react = require('react');
6
-
7
- const addRowsFromInstruments = "addRowsFromInstruments";
8
- const { KEY } = vuuUtils.metadataKeys;
9
- const NO_CONFIG = {};
10
- const isMenuItem = (menu) => "rpcName" in menu;
11
- const isGroupMenuItem = (menu) => "menus" in menu;
12
- const isRoot = (menu) => menu.name === "ROOT";
13
- const isCellMenu = (options) => options.context === "cell";
14
- const isRowMenu = (options) => options.context === "row";
15
- const isSelectionMenu = (options) => options.context === "selected-rows";
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 getMenuRpcRequest = (options) => {
45
- const { rpcName } = options;
46
- if (isCellMenu(options)) {
47
- return {
48
- field: options.field,
49
- rowKey: options.rowKey,
50
- rpcName,
51
- value: options.value,
52
- type: "VIEW_PORT_MENU_CELL_RPC"
53
- };
54
- } else if (isRowMenu(options)) {
55
- return {
56
- rowKey: options.rowKey,
57
- row: options.row,
58
- rpcName,
59
- type: "VIEW_PORT_MENU_ROW_RPC"
60
- };
61
- } else if (isSelectionMenu(options)) {
62
- return {
63
- rpcName,
64
- type: "VIEW_PORT_MENUS_SELECT_RPC"
65
- };
66
- } else {
67
- return {
68
- rpcName,
69
- type: "VIEW_PORT_MENU_TABLE_RPC"
70
- };
71
- }
72
- };
73
- const isTableLocation = (location) => ["grid", "header", "filter"].includes(location);
74
- const hasFilter = ({ filter }) => typeof filter === "string" && filter.length > 0;
75
- const getMenuItemOptions = (menu, options) => {
76
- switch (menu.context) {
77
- case "cell":
78
- return {
79
- ...menu,
80
- field: options.columnName,
81
- rowKey: options.row[KEY],
82
- value: options.row[options.columnMap[options.columnName]]
83
- };
84
- case "row":
85
- return {
86
- ...menu,
87
- row: vuuUtils.getRowRecord(options.row, options.columnMap),
88
- rowKey: options.row[KEY]
89
- };
90
- default:
91
- return menu;
92
- }
93
- };
94
- const menuShouldBeRenderedInThisContext = (menuItem, tableLocation, options) => {
95
- if (isGroupMenuItem(menuItem)) {
96
- return menuItem.menus.some(
97
- (childMenu) => menuShouldBeRenderedInThisContext(childMenu, tableLocation, options)
98
- );
99
- }
100
- if (!vuuContextCompatibleWithTableLocation(
101
- tableLocation,
102
- menuItem.context,
103
- options.selectedRows?.length
104
- )) {
105
- return false;
106
- }
107
- if (tableLocation === "grid" && hasFilter(menuItem)) {
108
- return gridRowMeetsFilterCriteria(
109
- menuItem.context,
110
- options.row,
111
- options.selectedRows,
112
- menuItem.filter,
113
- options.columnMap
114
- );
115
- }
116
- if (isCellMenu(menuItem) && menuItem.field !== "*") {
117
- return menuItem.field === options.columnName;
118
- }
119
- return true;
120
- };
121
- const buildMenuDescriptor = (menu, tableLocation, options) => {
122
- if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {
123
- if (isMenuItem(menu)) {
124
- return {
125
- label: menu.name,
126
- action: "MENU_RPC_CALL",
127
- options: getMenuItemOptions(menu, options)
128
- };
129
- } else {
130
- const children = menu.menus.map(
131
- (childMenu) => buildMenuDescriptor(childMenu, tableLocation, options)
132
- ).filter(
133
- (childMenu) => childMenu !== void 0
134
- );
135
- if (children.length > 0) {
136
- return {
137
- label: menu.name,
138
- children
139
- };
140
- }
141
- }
142
- }
143
- };
144
- const useVuuMenuActions = ({
145
- clientSideMenuActionHandler,
146
- dataSource,
147
- menuActionConfig = NO_CONFIG,
148
- onRpcResponse
149
- }) => {
150
- const buildViewserverMenuOptions = react.useCallback(
151
- (location, options) => {
152
- const { links, menu } = dataSource;
153
- const { visualLink } = menuActionConfig;
154
- const descriptors = [];
155
- if (location === "grid" && links && !visualLink) {
156
- links.forEach((linkDescriptor) => {
157
- const { link, label: linkLabel } = linkDescriptor;
158
- const label = linkLabel ? linkLabel : link.toTable;
159
- descriptors.push({
160
- label: `Link to ${label}`,
161
- action: "link-table",
162
- options: linkDescriptor
163
- });
164
- });
165
- }
166
- if (menu && isTableLocation(location)) {
167
- const menuDescriptor = buildMenuDescriptor(
168
- menu,
169
- location,
170
- options
171
- );
172
- if (isRoot(menu) && vuuUtils.isGroupMenuItemDescriptor(menuDescriptor)) {
173
- descriptors.push(...menuDescriptor.children);
174
- } else if (menuDescriptor) {
175
- descriptors.push(menuDescriptor);
176
- }
177
- }
178
- return descriptors;
179
- },
180
- [dataSource, menuActionConfig]
181
- );
182
- const handleMenuAction = react.useCallback(
183
- ({ menuId, options }) => {
184
- if (clientSideMenuActionHandler?.(menuId, options)) {
185
- return true;
186
- } else if (menuId === "MENU_RPC_CALL") {
187
- const rpcRequest = getMenuRpcRequest(options);
188
- dataSource.menuRpcCall(rpcRequest).then((rpcResponse) => {
189
- if (onRpcResponse && rpcResponse) {
190
- onRpcResponse && onRpcResponse(rpcResponse);
191
- }
192
- });
193
- return true;
194
- } else if (menuId === "link-table") {
195
- return dataSource.visualLink = options, true;
196
- } else {
197
- console.log(
198
- `useViewServer handleMenuAction, can't handle action type ${menuId}`
199
- );
200
- }
201
- return false;
202
- },
203
- [clientSideMenuActionHandler, dataSource, onRpcResponse]
204
- );
205
- return {
206
- buildViewserverMenuOptions,
207
- handleMenuAction
208
- };
209
- };
210
-
211
- exports.addRowsFromInstruments = addRowsFromInstruments;
212
- exports.useVuuMenuActions = useVuuMenuActions;
213
- //# sourceMappingURL=useVuuMenuActions.js.map