@vuu-ui/vuu-data-remote 2.1.19-beta.1 → 2.1.19-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.
- package/package.json +9 -10
- package/src/ConnectionManager.js +134 -0
- package/src/DedicatedWorker.js +44 -0
- package/src/LostConnectionHandler.js +89 -0
- package/src/VuuAuthProvider.js +78 -0
- package/src/VuuAuthenticator.js +36 -0
- package/src/VuuDataSource.js +514 -0
- package/src/WebSocketConnection.js +149 -0
- package/src/authenticate.js +50 -0
- package/src/constants.js +45 -0
- package/src/data-source.js +57 -0
- package/src/index.js +11 -0
- package/src/message-utils.js +44 -0
- package/src/server-proxy/array-backed-moving-window.js +172 -0
- package/src/server-proxy/messages.js +34 -0
- package/src/server-proxy/server-proxy.js +808 -0
- package/src/server-proxy/viewport.js +591 -0
- package/src/worker.js +65 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const defaultAuthUrl = "api/authn";
|
|
2
|
+
const isValidVuuUser = (response)=>"object" == typeof response && null !== response && "name" in response && "authorizations" in response && "string" == typeof response.name && Array.isArray(response.authorizations);
|
|
3
|
+
const parseVuuUserFromToken = (token)=>{
|
|
4
|
+
const [base64EncodedVuuUser] = token.split(".");
|
|
5
|
+
const jsonString = atob(base64EncodedVuuUser);
|
|
6
|
+
const response = JSON.parse(jsonString);
|
|
7
|
+
if (isValidVuuUser(response)) return response;
|
|
8
|
+
throw Error("auth token does not containe VuuUser");
|
|
9
|
+
};
|
|
10
|
+
const getVuuAuthToken = async (authUrl, token)=>{
|
|
11
|
+
const response = await fetch(authUrl, {
|
|
12
|
+
headers: {
|
|
13
|
+
Authorization: `Bearer ${token}`
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
if (!response.ok) throw Error("Authentication error: Auth token failure");
|
|
17
|
+
const json = await response.json();
|
|
18
|
+
const vuuUser = parseVuuUserFromToken(json.token);
|
|
19
|
+
return {
|
|
20
|
+
authorizations: vuuUser.authorizations,
|
|
21
|
+
token: json.token
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
const authenticate = async (username, password, authUrl = defaultAuthUrl)=>fetch(authUrl, {
|
|
25
|
+
method: "POST",
|
|
26
|
+
credentials: "include",
|
|
27
|
+
headers: {
|
|
28
|
+
"Content-Type": "application/json",
|
|
29
|
+
"access-control-allow-origin": location.host
|
|
30
|
+
},
|
|
31
|
+
body: JSON.stringify({
|
|
32
|
+
username,
|
|
33
|
+
password
|
|
34
|
+
})
|
|
35
|
+
}).then((response)=>{
|
|
36
|
+
if (response.ok) {
|
|
37
|
+
const authToken = response.headers.get("vuu-auth-token");
|
|
38
|
+
if ("string" == typeof authToken && authToken.length > 0) try {
|
|
39
|
+
return {
|
|
40
|
+
token: authToken,
|
|
41
|
+
user: parseVuuUserFromToken(authToken)
|
|
42
|
+
};
|
|
43
|
+
} catch (e) {
|
|
44
|
+
throw Error("Authentication error: vuu auth token decoding failed.");
|
|
45
|
+
}
|
|
46
|
+
throw Error("Authentication failed auth token not returned by server");
|
|
47
|
+
}
|
|
48
|
+
throw Error(`Authentication failed ${response.status} ${response.statusText}`);
|
|
49
|
+
});
|
|
50
|
+
export { authenticate, getVuuAuthToken, parseVuuUserFromToken };
|
package/src/constants.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
let _connectionId = 0;
|
|
2
|
+
const connectionId = {
|
|
3
|
+
get nextValue () {
|
|
4
|
+
return _connectionId++;
|
|
5
|
+
}
|
|
6
|
+
};
|
|
7
|
+
const msgType = {
|
|
8
|
+
connect: "connect",
|
|
9
|
+
connectionStatus: "connection-status",
|
|
10
|
+
getFilterData: "GetFilterData",
|
|
11
|
+
rowData: "rowData",
|
|
12
|
+
rowSet: "rowset",
|
|
13
|
+
select: "select",
|
|
14
|
+
selectAll: "selectAll",
|
|
15
|
+
selectNone: "selectNone",
|
|
16
|
+
selected: "selected",
|
|
17
|
+
snapshot: "snapshot",
|
|
18
|
+
update: "update",
|
|
19
|
+
createLink: "createLink",
|
|
20
|
+
disable: "disable",
|
|
21
|
+
enable: "enable",
|
|
22
|
+
suspend: "suspend",
|
|
23
|
+
resume: "resume",
|
|
24
|
+
addSubscription: "AddSubscription",
|
|
25
|
+
closeTreeNode: "closeTreeNode",
|
|
26
|
+
columnList: "ColumnList",
|
|
27
|
+
data: "data",
|
|
28
|
+
openTreeNode: "openTreeNode",
|
|
29
|
+
aggregate: "aggregate",
|
|
30
|
+
filter: "filter",
|
|
31
|
+
filterQuery: "filterQuery",
|
|
32
|
+
filterData: "filterData",
|
|
33
|
+
getSearchData: "GetSearchData",
|
|
34
|
+
groupBy: "groupBy",
|
|
35
|
+
modifySubscription: "ModifySubscription",
|
|
36
|
+
searchData: "searchData",
|
|
37
|
+
setGroupState: "setGroupState",
|
|
38
|
+
size: "size",
|
|
39
|
+
sort: "sort",
|
|
40
|
+
subscribed: "Subscribed",
|
|
41
|
+
tableList: "TableList",
|
|
42
|
+
unsubscribe: "TerminateSubscription",
|
|
43
|
+
viewRangeChanged: "ViewRangeChanged"
|
|
44
|
+
};
|
|
45
|
+
export { connectionId, msgType };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const isSizeOnly = (message)=>"viewport-update" === message.type && "size-only" === message.mode;
|
|
2
|
+
const toDataSourceConfig = (message)=>{
|
|
3
|
+
switch(message.type){
|
|
4
|
+
case "aggregate":
|
|
5
|
+
return {
|
|
6
|
+
aggregations: message.aggregations
|
|
7
|
+
};
|
|
8
|
+
case "columns":
|
|
9
|
+
return {
|
|
10
|
+
columns: message.columns
|
|
11
|
+
};
|
|
12
|
+
case "filter":
|
|
13
|
+
return {
|
|
14
|
+
filterSpec: message.filter
|
|
15
|
+
};
|
|
16
|
+
case "groupBy":
|
|
17
|
+
return {
|
|
18
|
+
groupBy: message.groupBy
|
|
19
|
+
};
|
|
20
|
+
case "sort":
|
|
21
|
+
return {
|
|
22
|
+
sort: message.sort
|
|
23
|
+
};
|
|
24
|
+
case "config":
|
|
25
|
+
return message.config;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const datasourceMessages = [
|
|
29
|
+
"config",
|
|
30
|
+
"aggregate",
|
|
31
|
+
"viewport-clear",
|
|
32
|
+
"viewport-update",
|
|
33
|
+
"columns",
|
|
34
|
+
"debounce-begin",
|
|
35
|
+
"disabled",
|
|
36
|
+
"enabled",
|
|
37
|
+
"filter",
|
|
38
|
+
"groupBy",
|
|
39
|
+
"vuu-links",
|
|
40
|
+
"vuu-menu",
|
|
41
|
+
"sort",
|
|
42
|
+
"subscribed",
|
|
43
|
+
"subscribe-failed"
|
|
44
|
+
];
|
|
45
|
+
const shouldMessageBeRoutedToDataSource = (message)=>{
|
|
46
|
+
const type = message.type;
|
|
47
|
+
return datasourceMessages.includes(type);
|
|
48
|
+
};
|
|
49
|
+
const isDataSourceConfigMessage = (message)=>[
|
|
50
|
+
"config",
|
|
51
|
+
"aggregate",
|
|
52
|
+
"columns",
|
|
53
|
+
"filter",
|
|
54
|
+
"groupBy",
|
|
55
|
+
"sort"
|
|
56
|
+
].includes(message.type);
|
|
57
|
+
export { isDataSourceConfigMessage, isSizeOnly, shouldMessageBeRoutedToDataSource, toDataSourceConfig };
|
package/src/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./ConnectionManager.js";
|
|
2
|
+
export * from "./constants.js";
|
|
3
|
+
export * from "./data-source.js";
|
|
4
|
+
export * from "./message-utils.js";
|
|
5
|
+
export * from "./VuuDataSource.js";
|
|
6
|
+
export { authenticate, getVuuAuthToken, parseVuuUserFromToken } from "./authenticate.js";
|
|
7
|
+
export { default as ConnectionManager } from "./ConnectionManager.js";
|
|
8
|
+
export { LostConnectionHandler, RetryOptions } from "./LostConnectionHandler.js";
|
|
9
|
+
export { VuuAuthTokenIssuePolicy, VuuAuthenticator } from "./VuuAuthenticator.js";
|
|
10
|
+
export { VuuAuthProvider } from "./VuuAuthProvider.js";
|
|
11
|
+
export { isConnected } from "./WebSocketConnection.js";
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const hasRequestId = (message)=>"requestId" in message;
|
|
2
|
+
const stripRequestId = ({ requestId, ...rest })=>[
|
|
3
|
+
requestId,
|
|
4
|
+
rest
|
|
5
|
+
];
|
|
6
|
+
const getFirstAndLastRows = (rows)=>{
|
|
7
|
+
let firstRow = rows.at(0);
|
|
8
|
+
if ("SIZE" === firstRow.updateType) if (1 === rows.length) return rows;
|
|
9
|
+
else firstRow = rows.at(1);
|
|
10
|
+
const lastRow = rows.at(-1);
|
|
11
|
+
return [
|
|
12
|
+
firstRow,
|
|
13
|
+
lastRow
|
|
14
|
+
];
|
|
15
|
+
};
|
|
16
|
+
const insertRow = (rows, row)=>{
|
|
17
|
+
const lastRow = rows.at(-1);
|
|
18
|
+
if (void 0 === lastRow || row.rowIndex > lastRow.rowIndex) rows.push(row);
|
|
19
|
+
else {
|
|
20
|
+
for(let i = 0; i < rows.length; i++)if (row.rowIndex < rows[i].rowIndex) return void rows.splice(i, 0, row);
|
|
21
|
+
else if (row.rowIndex === rows[i].rowIndex) {
|
|
22
|
+
row.ts < rows[i].ts || (rows[i] = row);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
throw Error("don't expect to get this far");
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const groupRowsByViewport = (rows)=>{
|
|
29
|
+
const result = {};
|
|
30
|
+
for (const row of rows){
|
|
31
|
+
const rowsForViewport = result[row.viewPortId] || (result[row.viewPortId] = []);
|
|
32
|
+
insertRow(rowsForViewport, row);
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
const createSchemaFromTableMetadata = ({ columns, dataTypes, key, table })=>({
|
|
37
|
+
table,
|
|
38
|
+
columns: columns.map((col, idx)=>({
|
|
39
|
+
name: col,
|
|
40
|
+
serverDataType: dataTypes[idx]
|
|
41
|
+
})),
|
|
42
|
+
key
|
|
43
|
+
});
|
|
44
|
+
export { createSchemaFromTableMetadata, getFirstAndLastRows, groupRowsByViewport, hasRequestId, stripRequestId };
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { WindowRange, logger } from "@vuu-ui/vuu-utils";
|
|
2
|
+
const EMPTY_ARRAY = [];
|
|
3
|
+
const log = logger("array-backed-moving-window");
|
|
4
|
+
function dataIsUnchanged(newRow, existingRow) {
|
|
5
|
+
if (!existingRow) return false;
|
|
6
|
+
if (existingRow.data.length !== newRow.data.length) return false;
|
|
7
|
+
if (existingRow.sel !== newRow.sel) return false;
|
|
8
|
+
for(let i = 0; i < existingRow.data.length; i++)if (existingRow.data[i] !== newRow.data[i]) return false;
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
class ArrayBackedMovingWindow {
|
|
12
|
+
#range;
|
|
13
|
+
bufferSize;
|
|
14
|
+
internalData;
|
|
15
|
+
rowsWithinRange;
|
|
16
|
+
clientRange;
|
|
17
|
+
rowCount;
|
|
18
|
+
constructor({ from: clientFrom, to: clientTo }, { from, to }, bufferSize){
|
|
19
|
+
this.bufferSize = bufferSize;
|
|
20
|
+
this.clientRange = new WindowRange(clientFrom, clientTo);
|
|
21
|
+
this.#range = new WindowRange(from, to);
|
|
22
|
+
this.internalData = new Array(bufferSize);
|
|
23
|
+
this.rowsWithinRange = 0;
|
|
24
|
+
this.rowCount = 0;
|
|
25
|
+
}
|
|
26
|
+
get range() {
|
|
27
|
+
return this.#range;
|
|
28
|
+
}
|
|
29
|
+
outOfRange(firstIndex, lastIndex) {
|
|
30
|
+
const { from, to } = this.range;
|
|
31
|
+
if (lastIndex < from) return true;
|
|
32
|
+
if (firstIndex >= to) return true;
|
|
33
|
+
}
|
|
34
|
+
setRowCount = (rowCount)=>{
|
|
35
|
+
log.info?.(`setRowCount ${rowCount}`);
|
|
36
|
+
if (rowCount < this.internalData.length) this.internalData.length = rowCount;
|
|
37
|
+
if (rowCount < this.rowCount) {
|
|
38
|
+
this.rowsWithinRange = 0;
|
|
39
|
+
const end = Math.min(rowCount, this.clientRange.to);
|
|
40
|
+
for(let i = this.clientRange.from; i < end; i++){
|
|
41
|
+
const rowIndex = i - this.#range.from;
|
|
42
|
+
if (void 0 !== this.internalData[rowIndex]) this.rowsWithinRange += 1;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
this.rowCount = rowCount;
|
|
46
|
+
};
|
|
47
|
+
setAtIndex(row) {
|
|
48
|
+
const { rowIndex: index } = row;
|
|
49
|
+
const internalIndex = index - this.#range.from;
|
|
50
|
+
if (dataIsUnchanged(row, this.internalData[internalIndex])) return false;
|
|
51
|
+
const isWithinClientRange = this.isWithinClientRange(index);
|
|
52
|
+
if (isWithinClientRange || this.isWithinRange(index)) {
|
|
53
|
+
if (!this.internalData[internalIndex] && isWithinClientRange) this.rowsWithinRange += 1;
|
|
54
|
+
this.internalData[internalIndex] = row;
|
|
55
|
+
}
|
|
56
|
+
return isWithinClientRange;
|
|
57
|
+
}
|
|
58
|
+
getAtIndex(index) {
|
|
59
|
+
return this.#range.isWithin(index) && null != this.internalData[index - this.#range.from] ? this.internalData[index - this.#range.from] : void 0;
|
|
60
|
+
}
|
|
61
|
+
isWithinRange(index) {
|
|
62
|
+
return this.#range.isWithin(index);
|
|
63
|
+
}
|
|
64
|
+
isWithinClientRange(index) {
|
|
65
|
+
return this.clientRange.isWithin(index);
|
|
66
|
+
}
|
|
67
|
+
setClientRange(from, to) {
|
|
68
|
+
log.debug?.(`setClientRange ${from} - ${to}`);
|
|
69
|
+
const currentFrom = this.clientRange.from;
|
|
70
|
+
const currentTo = Math.min(this.clientRange.to, this.rowCount);
|
|
71
|
+
if (from === currentFrom && to === currentTo) return [
|
|
72
|
+
false,
|
|
73
|
+
EMPTY_ARRAY
|
|
74
|
+
];
|
|
75
|
+
const originalRange = this.clientRange.copy();
|
|
76
|
+
this.clientRange.from = from;
|
|
77
|
+
this.clientRange.to = to;
|
|
78
|
+
this.rowsWithinRange = 0;
|
|
79
|
+
for(let i = from; i < to; i++){
|
|
80
|
+
const internalIndex = i - this.#range.from;
|
|
81
|
+
if (this.internalData[internalIndex]) this.rowsWithinRange += 1;
|
|
82
|
+
}
|
|
83
|
+
const clientRows = [];
|
|
84
|
+
const offset = this.#range.from;
|
|
85
|
+
if (to > originalRange.to) {
|
|
86
|
+
const start = Math.max(from, originalRange.to);
|
|
87
|
+
for(let i = start - offset; i < to - offset; i++){
|
|
88
|
+
const row = this.internalData[i];
|
|
89
|
+
if (row) clientRows.push(row);
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
const end = Math.min(originalRange.from, to);
|
|
93
|
+
for(let i = from - offset; i < end - offset; i++){
|
|
94
|
+
const row = this.internalData[i];
|
|
95
|
+
if (row) clientRows.push(row);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const serverDataRequired = this.bufferBreakout(from, to);
|
|
99
|
+
return [
|
|
100
|
+
serverDataRequired,
|
|
101
|
+
clientRows
|
|
102
|
+
];
|
|
103
|
+
}
|
|
104
|
+
setRange(from, to) {
|
|
105
|
+
if (from !== this.#range.from || to !== this.#range.to) {
|
|
106
|
+
log.debug?.(`setRange ${from} - ${to}`);
|
|
107
|
+
const [overlapFrom, overlapTo] = this.#range.overlap(from, to);
|
|
108
|
+
const newData = new Array(to - from);
|
|
109
|
+
this.rowsWithinRange = 0;
|
|
110
|
+
for(let i = overlapFrom; i < overlapTo; i++){
|
|
111
|
+
const row = this.getAtIndex(i);
|
|
112
|
+
if (row) {
|
|
113
|
+
const index = i - from;
|
|
114
|
+
newData[index] = row;
|
|
115
|
+
if (this.isWithinClientRange(i)) this.rowsWithinRange += 1;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
this.internalData = newData;
|
|
119
|
+
this.#range.from = from;
|
|
120
|
+
this.#range.to = to;
|
|
121
|
+
} else log.debug?.(`setRange ${from} - ${to} IGNORED because not changed`);
|
|
122
|
+
}
|
|
123
|
+
get data() {
|
|
124
|
+
return this.internalData;
|
|
125
|
+
}
|
|
126
|
+
bufferBreakout = (from, to)=>{
|
|
127
|
+
const bufferPerimeter = 0.25 * this.bufferSize;
|
|
128
|
+
if (this.#range.to - to < bufferPerimeter) return true;
|
|
129
|
+
if (this.#range.from > 0 && from - this.#range.from < bufferPerimeter) return true;
|
|
130
|
+
return false;
|
|
131
|
+
};
|
|
132
|
+
getData() {
|
|
133
|
+
const { from, to } = this.#range;
|
|
134
|
+
const { from: clientFrom, to: clientTo } = this.clientRange;
|
|
135
|
+
const startOffset = Math.max(0, clientFrom - from);
|
|
136
|
+
const endOffset = Math.min(to - from, to, clientTo - from, this.rowCount ?? to);
|
|
137
|
+
return this.internalData.slice(startOffset, endOffset);
|
|
138
|
+
}
|
|
139
|
+
clear() {
|
|
140
|
+
log.debug?.("clear");
|
|
141
|
+
this.internalData.length = 0;
|
|
142
|
+
this.rowsWithinRange = 0;
|
|
143
|
+
this.setRowCount(0);
|
|
144
|
+
}
|
|
145
|
+
getCurrentDataRange() {
|
|
146
|
+
const rows = this.internalData;
|
|
147
|
+
const len = rows.length;
|
|
148
|
+
let [firstRow] = this.internalData;
|
|
149
|
+
let lastRow = this.internalData[len - 1];
|
|
150
|
+
if (firstRow && lastRow) return [
|
|
151
|
+
firstRow.rowIndex,
|
|
152
|
+
lastRow.rowIndex
|
|
153
|
+
];
|
|
154
|
+
for(let i = 0; i < len; i++)if (void 0 !== rows[i]) {
|
|
155
|
+
firstRow = rows[i];
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
for(let i = len - 1; i >= 0; i--)if (void 0 !== rows[i]) {
|
|
159
|
+
lastRow = rows[i];
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
if (firstRow && lastRow) return [
|
|
163
|
+
firstRow.rowIndex,
|
|
164
|
+
lastRow.rowIndex
|
|
165
|
+
];
|
|
166
|
+
return [
|
|
167
|
+
-1,
|
|
168
|
+
-1
|
|
169
|
+
];
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
export { ArrayBackedMovingWindow };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const CHANGE_VP_SUCCESS = "CHANGE_VP_SUCCESS";
|
|
2
|
+
const CHANGE_VP_RANGE_SUCCESS = "CHANGE_VP_RANGE_SUCCESS";
|
|
3
|
+
const CLOSE_TREE_NODE = "CLOSE_TREE_NODE";
|
|
4
|
+
const CLOSE_TREE_SUCCESS = "CLOSE_TREE_SUCCESS";
|
|
5
|
+
const CLOSE_TREE_REJECT = "CLOSE_TREE_REJECT";
|
|
6
|
+
const CREATE_VISUAL_LINK = "CREATE_VISUAL_LINK";
|
|
7
|
+
const CREATE_VP = "CREATE_VP";
|
|
8
|
+
const DISABLE_VP = "DISABLE_VP";
|
|
9
|
+
const DISABLE_VP_SUCCESS = "DISABLE_VP_SUCCESS";
|
|
10
|
+
const DISABLE_VP_REJECT = "DISABLE_VP_REJECT";
|
|
11
|
+
const ENABLE_VP = "ENABLE_VP";
|
|
12
|
+
const ENABLE_VP_SUCCESS = "ENABLE_VP_SUCCESS";
|
|
13
|
+
const ENABLE_VP_REJECT = "ENABLE_VP_REJECT";
|
|
14
|
+
const GET_TABLE_META = "GET_TABLE_META";
|
|
15
|
+
const GET_VP_VISUAL_LINKS = "GET_VP_VISUAL_LINKS";
|
|
16
|
+
const GET_VIEW_PORT_MENUS = "GET_VIEW_PORT_MENUS";
|
|
17
|
+
const VIEW_PORT_MENUS_SELECT_RPC = "VIEW_PORT_MENUS_SELECT_RPC";
|
|
18
|
+
const VIEW_PORT_MENU_CELL_RPC = "VIEW_PORT_MENU_CELL_RPC";
|
|
19
|
+
const VIEW_PORT_MENU_TABLE_RPC = "VIEW_PORT_MENU_TABLE_RPC";
|
|
20
|
+
const VIEW_PORT_MENU_ROW_RPC = "VIEW_PORT_MENU_ROW_RPC";
|
|
21
|
+
const VIEW_PORT_MENU_RESP = "VIEW_PORT_MENU_RESP";
|
|
22
|
+
const VIEW_PORT_MENU_REJ = "VIEW_PORT_MENU_REJ";
|
|
23
|
+
const HB = "HB";
|
|
24
|
+
const HB_RESP = "HB_RESP";
|
|
25
|
+
const OPEN_TREE_NODE = "OPEN_TREE_NODE";
|
|
26
|
+
const OPEN_TREE_SUCCESS = "OPEN_TREE_SUCCESS";
|
|
27
|
+
const OPEN_TREE_REJECT = "OPEN_TREE_REJECT";
|
|
28
|
+
const REMOVE_VP = "REMOVE_VP";
|
|
29
|
+
const REMOVE_VP_REJECT = "REMOVE_VP_REJECT";
|
|
30
|
+
const MENU_RPC_RESP = "MENU_RPC_RESP";
|
|
31
|
+
const TABLE_ROW = "TABLE_ROW";
|
|
32
|
+
const SIZE = "SIZE";
|
|
33
|
+
const UPDATE = "U";
|
|
34
|
+
export { CHANGE_VP_RANGE_SUCCESS, CHANGE_VP_SUCCESS, CLOSE_TREE_NODE, CLOSE_TREE_REJECT, CLOSE_TREE_SUCCESS, CREATE_VISUAL_LINK, CREATE_VP, DISABLE_VP, DISABLE_VP_REJECT, DISABLE_VP_SUCCESS, ENABLE_VP, ENABLE_VP_REJECT, ENABLE_VP_SUCCESS, GET_TABLE_META, GET_VIEW_PORT_MENUS, GET_VP_VISUAL_LINKS, HB, HB_RESP, MENU_RPC_RESP, OPEN_TREE_NODE, OPEN_TREE_REJECT, OPEN_TREE_SUCCESS, REMOVE_VP, REMOVE_VP_REJECT, SIZE, TABLE_ROW, UPDATE, VIEW_PORT_MENUS_SELECT_RPC, VIEW_PORT_MENU_CELL_RPC, VIEW_PORT_MENU_REJ, VIEW_PORT_MENU_RESP, VIEW_PORT_MENU_ROW_RPC, VIEW_PORT_MENU_TABLE_RPC };
|