-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathLocalDatasourceProvider.tsx
More file actions
81 lines (76 loc) · 1.95 KB
/
LocalDatasourceProvider.tsx
File metadata and controls
81 lines (76 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import type {
DataSourceConfig,
DataSourceConstructorProps,
ServerAPI,
} from "@vuu-ui/vuu-data-types";
import type { VuuTable } from "@vuu-ui/vuu-protocol-types";
import { DataProvider } from "@vuu-ui/vuu-utils";
import { ReactNode } from "react";
import moduleContainer from "../core/module/ModuleContainer";
import tableContainer from "../core/table/TableContainer";
const serverAPI: Pick<
ServerAPI,
"getTableList" | "getTableSchema" | "rpcCall"
> = {
getTableList: async () => {
const tables = moduleContainer.moduleNames.reduce<Array<VuuTable>>(
(tableList, moduleName) => {
const moduleTables = moduleContainer.get(moduleName).getTableList();
moduleTables.forEach((tableName) => {
const table = tableContainer.getTable(tableName);
tableList.push(table.schema.table);
});
return tableList;
},
[],
);
return { tables };
},
getTableSchema: async ({ module, table }: VuuTable) => {
return moduleContainer.get(module).getTableSchema(table);
},
rpcCall: async () => {
throw Error(
"RpcCall no longer supported on LocalDataSOurceProvider ServerAPI",
);
},
};
const getServerAPI = async () => serverAPI;
class VuuDataSource {
constructor({
aggregations,
columns,
filterSpec,
groupBy,
sort,
table,
viewport,
visualLink,
}: DataSourceConstructorProps) {
const config: DataSourceConfig = {
aggregations,
columns,
filterSpec,
groupBy,
sort,
visualLink,
};
const module = moduleContainer.get(table.module);
return module.createDataSource(table.table, viewport, config);
}
}
export const LocalDataSourceProvider = ({
children,
}: {
children: ReactNode;
}) => {
return (
<DataProvider
// eslint-disable-next-line @typescript-eslint/no-explicit-any
VuuDataSource={VuuDataSource as any}
getServerAPI={getServerAPI}
>
{children}
</DataProvider>
);
};