From afe0dfdd1bb6485db16582f2159b51515d393d40 Mon Sep 17 00:00:00 2001 From: Tom Jakubowski Date: Thu, 28 Aug 2025 10:57:25 -0700 Subject: [PATCH 1/2] Fix WorkspaceElement.removeTable() The ObservableMap's delete listener used to be able to "reject" deletions by returning false. This is no longer the case; the listener in Workspace always returns undefined now. Account for this in observable map's delete method. Co-authored by: Davis Silverman Signed-off-by: Tom Jakubowski --- .../src/ts/utils/observable_map.ts | 8 ++----- .../test/js/table.spec.js | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/packages/perspective-workspace/src/ts/utils/observable_map.ts b/packages/perspective-workspace/src/ts/utils/observable_map.ts index 486bf65370..cc7b27ec85 100644 --- a/packages/perspective-workspace/src/ts/utils/observable_map.ts +++ b/packages/perspective-workspace/src/ts/utils/observable_map.ts @@ -25,12 +25,8 @@ export class ObservableMap extends Map { } delete(name: K) { - const result = this._delete_listener?.(name); - if (result) { - return super.delete(name); - } else { - return false; - } + this._delete_listener?.(name); + return super.delete(name); } addSetListener(listener: (name: K, val: V) => void) { diff --git a/packages/perspective-workspace/test/js/table.spec.js b/packages/perspective-workspace/test/js/table.spec.js index 944d71724c..5a19cd88d5 100644 --- a/packages/perspective-workspace/test/js/table.spec.js +++ b/packages/perspective-workspace/test/js/table.spec.js @@ -111,6 +111,27 @@ function tests(context, compare) { `${context}-replace-table-works-with-errored-table.txt` ); }); + + test("removeTable() smoke test", async ({ page }) => { + const tables = await page.evaluate(async () => { + const table = await window.__WORKER__.table("x\n1\n"); + const workspace = document.getElementById("workspace"); + await workspace.addTable("temptable", table); + return Array.from(workspace.tables.keys()); + }); + + expect(tables).toEqual(["superstore", "temptable"]); + const result = await page.evaluate(async () => { + return await workspace.removeTable("temptable"); + }); + expect(result).toBe(true); + + const tablesAfterRemove = await page.evaluate(async () => { + const workspace = document.getElementById("workspace"); + return Array.from(workspace.tables.keys()); + }); + expect(tablesAfterRemove).toEqual(["superstore"]); + }); } test.describe("Workspace table functions", () => { From 141ace2ee477ac8532706e4fbf2acd21dfa901fe Mon Sep 17 00:00:00 2001 From: Davis Silverman Date: Fri, 11 Jul 2025 10:50:10 -0400 Subject: [PATCH 2/2] PerspectiveWorkspace React component Signed-off-by: Davis Silverman --- examples/react-workspace-example/build.js | 38 ++ examples/react-workspace-example/globals.d.ts | 21 + examples/react-workspace-example/package.json | 29 + .../react-workspace-example/src/index.css | 68 +++ .../react-workspace-example/src/index.html | 19 + .../react-workspace-example/src/index.tsx | 154 +++++ .../react-workspace-example/tsconfig.json | 36 ++ packages/perspective-react/package.json | 4 +- packages/perspective-react/src/index.tsx | 86 +-- packages/perspective-react/src/utils.tsx | 27 + packages/perspective-react/src/viewer.tsx | 89 +++ packages/perspective-react/src/workspace.tsx | 168 ++++++ .../perspective-react/test/js/basic.story.tsx | 15 +- packages/perspective-react/test/js/index.css | 14 + .../perspective-react/test/js/react.spec.tsx | 100 +++- .../test/js/workspace.story.tsx | 148 +++++ .../test/js/line.spec.ts | 2 - packages/perspective-workspace/build.js | 1 + packages/perspective-workspace/package.json | 1 + .../src/ts/extensions.ts | 51 ++ .../src/ts/perspective-workspace.ts | 21 +- .../src/ts/workspace/dockpanel.ts | 76 ++- .../src/ts/workspace/widget.ts | 3 +- .../src/ts/workspace/workspace.ts | 176 +++++- packages/perspective-workspace/tsconfig.json | 2 +- pnpm-lock.yaml | 96 +++- .../cpp/perspective/build.mjs | 69 +++ .../cpp/perspective/package.json | 19 + .../cpp/protos/perspective.proto | 540 ++++++++++++++++++ .../src/rust/custom_elements/viewer.rs | 2 +- tools/perspective-test/results.tar.gz | Bin 133188 -> 134829 bytes 31 files changed, 1898 insertions(+), 177 deletions(-) create mode 100644 examples/react-workspace-example/build.js create mode 100644 examples/react-workspace-example/globals.d.ts create mode 100644 examples/react-workspace-example/package.json create mode 100644 examples/react-workspace-example/src/index.css create mode 100644 examples/react-workspace-example/src/index.html create mode 100644 examples/react-workspace-example/src/index.tsx create mode 100644 examples/react-workspace-example/tsconfig.json create mode 100644 packages/perspective-react/src/utils.tsx create mode 100644 packages/perspective-react/src/viewer.tsx create mode 100644 packages/perspective-react/src/workspace.tsx create mode 100644 packages/perspective-react/test/js/workspace.story.tsx create mode 100644 packages/perspective-workspace/src/ts/extensions.ts create mode 100644 rust/perspective-server/cpp/perspective/build.mjs create mode 100644 rust/perspective-server/cpp/perspective/package.json create mode 100644 rust/perspective-server/cpp/protos/perspective.proto diff --git a/examples/react-workspace-example/build.js b/examples/react-workspace-example/build.js new file mode 100644 index 0000000000..44be9a5f78 --- /dev/null +++ b/examples/react-workspace-example/build.js @@ -0,0 +1,38 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +import esbuild from "esbuild"; +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; +import { dirname } from "path"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +await esbuild.build({ + entryPoints: ["src/index.tsx"], + outdir: "dist", + format: "esm", + bundle: true, + sourcemap: "linked", + target: "es2022", + loader: { + ".arrow": "file", + ".wasm": "file", + }, + assetNames: "[name]", +}); + +fs.writeFileSync( + path.join(__dirname, "dist/index.html"), + fs.readFileSync(path.join(__dirname, "src/index.html")).toString() +); diff --git a/examples/react-workspace-example/globals.d.ts b/examples/react-workspace-example/globals.d.ts new file mode 100644 index 0000000000..26ce93c67f --- /dev/null +++ b/examples/react-workspace-example/globals.d.ts @@ -0,0 +1,21 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +declare module "*.wasm" { + const content: string; + export default content; +} + +declare module "*.arrow" { + const content: string; + export default content; +} diff --git a/examples/react-workspace-example/package.json b/examples/react-workspace-example/package.json new file mode 100644 index 0000000000..cc649f4a37 --- /dev/null +++ b/examples/react-workspace-example/package.json @@ -0,0 +1,29 @@ +{ + "name": "react-workspace-example", + "private": true, + "version": "3.7.4", + "description": "An example app using @finos/perspective-react and its workspace component", + "type": "module", + "scripts": { + "build": "node build.js", + "start": "node build.js && http-server dist" + }, + "keywords": [], + "license": "Apache-2.0", + "dependencies": { + "@finos/perspective": "workspace:^", + "@finos/perspective-viewer": "workspace:^", + "@finos/perspective-viewer-d3fc": "workspace:^", + "@finos/perspective-viewer-datagrid": "workspace:^", + "@finos/perspective-react": "workspace:^", + "react": "^18.0.0", + "react-dom": "^18.0.0", + "superstore-arrow": "^3.0.0" + }, + "devDependencies": { + "esbuild": "^0.25.5", + "http-server": "^14.1.1", + "@types/react": "^18", + "@types/react-dom": "^18" + } +} diff --git a/examples/react-workspace-example/src/index.css b/examples/react-workspace-example/src/index.css new file mode 100644 index 0000000000..dd60379436 --- /dev/null +++ b/examples/react-workspace-example/src/index.css @@ -0,0 +1,68 @@ +/* ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ + * ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ + * ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ + * ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ + * ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ + * ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ + * ┃ Copyright (c) 2017, the Perspective Authors. ┃ + * ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ + * ┃ This file is part of the Perspective library, distributed under the terms ┃ + * ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ + * ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + */ + +body { + margin: 0; + background-color: #f0f0f0; + font-family: "ui-monospace", "SFMono-Regular", "SF Mono", "Menlo", + "Consolas", "Liberation Mono", monospace; +} + +.container { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + + display: grid; + gap: 8px; + grid-template-columns: 1fr 1fr; + grid-template-rows: 45px 1fr; +} + +perspective-viewer { + grid-row: 2; +} + +.toolbar { + grid-row: 1; + grid-column-start: 1; + grid-column-end: 3; + + display: flex; + flex-direction: row; + gap: 10px; + padding: 10px; + justify-content: stretch; + border-bottom: 1px solid #666; +} + +button { + font-family: "ui-monospace", "SFMono-Regular", "SF Mono", "Menlo", + "Consolas", "Liberation Mono", monospace; +} + +.workspace-container { + display: flex; + flex-direction: column; + + .workspace-toolbar { + display: flex; + flex-direction: row; + } + + perspective-workspace { + height: 100vh; + } +} \ No newline at end of file diff --git a/examples/react-workspace-example/src/index.html b/examples/react-workspace-example/src/index.html new file mode 100644 index 0000000000..d06e153a60 --- /dev/null +++ b/examples/react-workspace-example/src/index.html @@ -0,0 +1,19 @@ + + + + + + Perspective React Example + + + + +
+ + diff --git a/examples/react-workspace-example/src/index.tsx b/examples/react-workspace-example/src/index.tsx new file mode 100644 index 0000000000..f3111e523b --- /dev/null +++ b/examples/react-workspace-example/src/index.tsx @@ -0,0 +1,154 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +// # [Perspective bootstrapping](https://perspective.finos.org/guide/how_to/javascript/importing.html) + +// Here we're initializing the WASM interpreter that powers the perspective API +// and viewer, as covered in the [user guide section on bundling](https://perspective.finos.org/guide/how_to/javascript/importing.html). +// This example is written assuming that the bundler is configured +// to treat these files as a "file" and returns a path as the default export. +// Use ./build.js as an example. The type stubs are in ./globals.d.ts + +import perspective from "@finos/perspective"; +import perspective_viewer from "@finos/perspective-viewer"; +import "@finos/perspective-viewer-datagrid"; +import "@finos/perspective-viewer-d3fc"; + +import SERVER_WASM from "@finos/perspective/dist/wasm/perspective-server.wasm"; +import CLIENT_WASM from "@finos/perspective-viewer/dist/wasm/perspective-viewer.wasm"; + +await Promise.all([ + perspective.init_server(fetch(SERVER_WASM)), + perspective_viewer.init_client(fetch(CLIENT_WASM)), +]); + +// # Data Source + +// Data source creates a static Web Worker instance of Perspective engine, and a +// table creation function which both downloads data and loads it into the +// engine. + +import type * as psp from "@finos/perspective"; +import * as Workspace from "@finos/perspective-workspace"; + +import * as React from "react"; +import { createRoot } from "react-dom/client"; +import { PerspectiveWorkspace } from "@finos/perspective-react"; +import { PerspectiveWorkspaceConfig } from "@finos/perspective-workspace"; + +import "@finos/perspective-viewer/dist/css/pro.css"; +import "@finos/perspective-workspace/dist/css/pro.css"; +import "./index.css"; + +const CLIENT = await perspective.worker(); + +interface WorkspaceState { + mounted: boolean; + config: PerspectiveWorkspaceConfig; + tables: Record>; + /// This object is kept for the 'swap tables' button. + /// It is a backup set of tables that correspond in keys to `tables` + /// but with different data. + swapTables: Record>; + /// if false use `tables` and true use `swapTables` in the workspace + swap: boolean; +} + +const WorkspaceApp: React.FC = () => { + const [state, setState] = React.useState({ + mounted: true, + tables: {}, + swapTables: {}, + config: { + sizes: [], + viewers: {}, + detail: undefined, + }, + swap: false, + }); + + const onClickAddViewer = React.useCallback(async () => { + const name = window.crypto.randomUUID().slice(0, 8); + const data = `a,b,c\n${Math.random()},${Math.random()},${Math.random()}`; + const swapData = `a,b,c\n${Math.random()},${Math.random()},${Math.random()}\n${Math.random()},${Math.random()},${Math.random()}`; + // dont assign internal names to the tables they are not used by the workspace + const t = CLIENT.table(data); + const swap = CLIENT.table(swapData); + const config = Workspace.addViewer(state.config, { + table: name, + title: name, + }); + const tables = { ...state.tables, [name]: t }; + const swapTables = { ...state.swapTables, [name]: swap }; + setState({ + ...state, + tables, + config, + swapTables, + }); + }, [state]); + + const onLayoutUpdate: (detail: { + layout: PerspectiveWorkspaceConfig; + tables: Record>; + }) => void = React.useCallback( + ({ layout, tables }) => { + const newTables = Object.fromEntries( + Object.entries(tables).map(([k, v]) => [k, Promise.resolve(v)]) + ); + setState({ + ...state, + config: layout, + tables: state.swap ? state.tables : newTables, + swapTables: state.swap ? newTables : state.swapTables, + }); + }, + [state] + ); + + const onClickToggleMount = () => + setState((old) => ({ ...old, mounted: !state.mounted })); + + // swaps the tables out but uses the same name of them. + // this keeps the layout the same, but the data within each viewer changes + const swapTables = React.useCallback(() => { + setState({ + ...state, + swap: !state.swap, + }); + }, [state]); + + return ( +
+
+ + + +
+ {state.mounted && ( + + )} +
+ ); +}; + +createRoot(document.getElementById("root")!).render(); diff --git a/examples/react-workspace-example/tsconfig.json b/examples/react-workspace-example/tsconfig.json new file mode 100644 index 0000000000..2bf55a7ab2 --- /dev/null +++ b/examples/react-workspace-example/tsconfig.json @@ -0,0 +1,36 @@ +{ + "compilerOptions": { + "moduleResolution": "bundler", + "target": "ESNext", + "module": "ESNext", + "lib": [ + "ES2020", + "dom" + ], + "strict": true, + "alwaysStrict": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noImplicitUseStrict": false, + "noUnusedLocals": false, + "strictNullChecks": true, + "skipLibCheck": false, + "removeComments": false, + "jsx": "react-jsx", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": false, + "noEmitHelpers": true, + "inlineSourceMap": false, + "sourceMap": true, + "emitDecoratorMetadata": false, + "experimentalDecorators": true, + "downlevelIteration": true, + "pretty": true + }, + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/packages/perspective-react/package.json b/packages/perspective-react/package.json index ca732b7f19..ed0038bfd0 100644 --- a/packages/perspective-react/package.json +++ b/packages/perspective-react/package.json @@ -7,7 +7,8 @@ "author": "", "license": "ISC", "dependencies": { - "@finos/perspective": "workspace:^" + "@finos/perspective": "workspace:^", + "async-mutex": "0.5.0" }, "exports": { ".": "./dist/esm/index.js" @@ -24,6 +25,7 @@ "peerDependencies": { "@finos/perspective": "workspace:^", "@finos/perspective-viewer": "workspace:^", + "@finos/perspective-workspace": "workspace:^", "@types/react": "^18", "react": "^18", "react-dom": "^18" diff --git a/packages/perspective-react/src/index.tsx b/packages/perspective-react/src/index.tsx index deada682b5..0a485d721e 100644 --- a/packages/perspective-react/src/index.tsx +++ b/packages/perspective-react/src/index.tsx @@ -20,87 +20,5 @@ * @module */ -import * as React from "react"; -import type * as psp from "@finos/perspective"; -import type * as pspViewer from "@finos/perspective-viewer"; - -function usePspListener( - viewer: HTMLElement | null, - name: string, - f?: (x: A) => void -) { - React.useEffect(() => { - if (!f) return; - const ctx = new AbortController(); - const callback = (e: Event) => f((e as CustomEvent).detail); - viewer?.addEventListener(name, callback, { signal: ctx.signal }); - return () => ctx.abort(); - }, [viewer, f]); -} - -export interface PerspectiveViewerProps { - table?: psp.Table | Promise; - config?: pspViewer.ViewerConfigUpdate; - onConfigUpdate?: (config: pspViewer.ViewerConfigUpdate) => void; - onClick?: (data: pspViewer.PerspectiveClickEventDetail) => void; - onSelect?: (data: pspViewer.PerspectiveSelectEventDetail) => void; - - // Applicable props from `React.HTMLAttributes`, which we cannot extend - // directly because Perspective changes the signature of `onClick`. - className?: string | undefined; - hidden?: boolean | undefined; - id?: string | undefined; - slot?: string | undefined; - style?: React.CSSProperties | undefined; - tabIndex?: number | undefined; - title?: string | undefined; -} - -function PerspectiveViewerImpl(props: PerspectiveViewerProps) { - const [viewer, setViewer] = - React.useState(null); - - React.useEffect(() => { - return () => { - viewer?.delete(); - }; - }, [viewer]); - - React.useEffect(() => { - if (props.table) { - viewer?.load(props.table); - } else { - viewer?.eject(); - } - }, [viewer, props.table]); - - React.useEffect(() => { - if (props.table && props.config) { - viewer?.restore(props.config); - } - }, [viewer, props.table, JSON.stringify(props.config)]); - - usePspListener(viewer, "perspective-click", props.onClick); - usePspListener(viewer, "perspective-select", props.onSelect); - usePspListener(viewer, "perspective-config-update", props.onConfigUpdate); - - return ( - ( + el: HTMLElement | undefined, + event: string, + cb?: (x: A) => void +) { + React.useEffect(() => { + if (!cb || !el) return; + const ctx = new AbortController(); + const callback = (e: Event) => cb((e as CustomEvent).detail); + el?.addEventListener(event, callback, { signal: ctx.signal }); + return () => ctx.abort(); + }, [el, cb]); +} diff --git a/packages/perspective-react/src/viewer.tsx b/packages/perspective-react/src/viewer.tsx new file mode 100644 index 0000000000..0a6175e1b9 --- /dev/null +++ b/packages/perspective-react/src/viewer.tsx @@ -0,0 +1,89 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +import type * as psp from "@finos/perspective"; +import type * as pspViewer from "@finos/perspective-viewer"; + +import * as utils from "./utils"; + +import * as React from "react"; + +export interface PerspectiveViewerProps { + table?: psp.Table | Promise; + config?: pspViewer.ViewerConfigUpdate; + onConfigUpdate?: (config: pspViewer.ViewerConfigUpdate) => void; + onClick?: (data: pspViewer.PerspectiveClickEventDetail) => void; + onSelect?: (data: pspViewer.PerspectiveSelectEventDetail) => void; + + // Applicable props from `React.HTMLAttributes`, which we cannot extend + // directly because Perspective changes the signature of `onClick`. + className?: string | undefined; + hidden?: boolean | undefined; + id?: string | undefined; + slot?: string | undefined; + style?: React.CSSProperties | undefined; + tabIndex?: number | undefined; + title?: string | undefined; +} + +function PerspectiveViewerImpl(props: PerspectiveViewerProps) { + const [viewer, setViewer] = + React.useState(); + + React.useEffect(() => { + return () => { + viewer?.delete(); + }; + }, [viewer]); + + React.useEffect(() => { + if (props.table) { + viewer?.load(props.table); + } else { + viewer?.eject(); + } + }, [viewer, props.table]); + + React.useEffect(() => { + if (viewer && props.table && props.config) { + viewer.restore(props.config); + } + }, [viewer, props.table, JSON.stringify(props.config)]); + + utils.usePspListener(viewer, "perspective-click", props.onClick); + utils.usePspListener(viewer, "perspective-select", props.onSelect); + utils.usePspListener( + viewer, + "perspective-config-update", + props.onConfigUpdate + ); + + return ( + setViewer(r ?? undefined)} + id={props.id} + className={props.className} + hidden={props.hidden} + slot={props.slot} + style={props.style} + tabIndex={props.tabIndex} + title={props.title} + /> + ); +} + +/** + * A React wrapper component for `` Custom Element. + */ +export const PerspectiveViewer: React.FC = React.memo( + PerspectiveViewerImpl +); diff --git a/packages/perspective-react/src/workspace.tsx b/packages/perspective-react/src/workspace.tsx new file mode 100644 index 0000000000..8f4f94ce86 --- /dev/null +++ b/packages/perspective-react/src/workspace.tsx @@ -0,0 +1,168 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +import type * as psp from "@finos/perspective"; +import type * as pspWorkspace from "@finos/perspective-workspace"; +import { + PerspectiveWorkspaceConfig, + ViewerConfigUpdateExt, +} from "@finos/perspective-workspace"; + +import * as utils from "./utils"; + +import * as React from "react"; +import { Mutex } from "async-mutex"; +import { HTMLPerspectiveViewerElement } from "@finos/perspective-viewer"; + +export interface PerspectiveWorkspaceProps + extends React.HTMLAttributes { + tables: Record>; + config: PerspectiveWorkspaceConfig; + onLayoutUpdate?: (detail: { + layout: PerspectiveWorkspaceConfig; + tables: Record>; + }) => void; + onNewView?: (detail: { + config: ViewerConfigUpdateExt; + widget: pspWorkspace.PerspectiveViewerWidget; + }) => void; + onToggleGlobalFilter?: (detail: { + widget: pspWorkspace.PerspectiveViewerWidget; + isGlobalFilter: boolean; + }) => void; +} + +export const PerspectiveWorkspace = React.forwardRef< + pspWorkspace.HTMLPerspectiveWorkspaceElement | undefined, + PerspectiveWorkspaceProps +>( + ( + { + tables, + config, + onLayoutUpdate = () => {}, + onNewView = () => {}, + onToggleGlobalFilter = () => {}, + id, + className, + style, + }, + ref + ) => { + const [workspace, setWorkspace] = + React.useState(); + + React.useImperativeHandle(ref, () => workspace, [workspace]); + + // React.useEffect(() => { + // if (!workspace) return; + // }, [workspace, config]); + + // const lock = React.useRef(new Mutex()); + + React.useEffect(() => { + if (!workspace) return; + reconcileNewTables(workspace, tables, config).then(() => { + workspace.restore(config); + }); + // workspace.restore(config); + // lock.current.runExclusive(async () => { + // }); + }, [workspace, tables, config]); + + utils.usePspListener(workspace, "workspace-new-view", onNewView); + + utils.usePspListener( + workspace, + "workspace-layout-update", + onLayoutUpdate + ); + utils.usePspListener( + workspace, + "workspace-toggle-global-filter", + onToggleGlobalFilter + ); + + return ( + setWorkspace(r ?? undefined)} + id={id} + className={className} + style={style} + > + ); + } +); + +// export const PerspectiveWorkspace = React.memo(PerspectiveWorkspaceImpl); + +/// swaps all tables in the workspace with the ones passed in. +/// Any viewers that are using tables not in the new tables will be ejected (`viewer>eject()`). +async function reconcileNewTables( + workspace: pspWorkspace.HTMLPerspectiveWorkspaceElement, + next: Record>, + config: PerspectiveWorkspaceConfig +) { + const prev = workspace.tables; + const allViewers = Array.from( + workspace.children + ) as HTMLPerspectiveViewerElement[]; + const tableViewerMap: Record = + allViewers.reduce((acc, v) => { + const t = config.viewers[v.slot]?.table; + if (t === undefined) { + return acc; + } else { + return { + ...acc, + [t]: [...(acc[t] ?? []), v], + }; + } + }, {} as Record); + + /// reconcile the two sets of tables into the final tables set. + const names = new Set([...Object.keys(next), ...prev.keys()]); + for (const name of names) { + const usedViewers = tableViewerMap[name]; + if (Object.is(prev.get(name), next[name])) { + // We dont need to modify anything in the tables set + // the key is there and uses the same table. + } else if (next[name] === undefined) { + // name is no longer mapped in the new set of tables. + const p = prev.get(name); + if (p === undefined) { + throw new Error("Unreachable."); + } + await Promise.all( + usedViewers.map((v) => { + return v.eject(); + }) + ); + workspace.removeTable(name); + } else if (prev.get(name) === undefined) { + // A table was added that did not exist in the previous set. + await workspace.addTable(name, next[name]); + } else { + // the table for `name` was remapped. + // eject and then reload viewers using `name` + await Promise.all( + usedViewers.map(async (v) => { + await v.eject(); + await v.load(next[name]); + }) + ); + await workspace.replaceTable(name, next[name]); + } + } + + // await Promise.all(tasks); +} diff --git a/packages/perspective-react/test/js/basic.story.tsx b/packages/perspective-react/test/js/basic.story.tsx index db525cf524..d836f91246 100644 --- a/packages/perspective-react/test/js/basic.story.tsx +++ b/packages/perspective-react/test/js/basic.story.tsx @@ -14,6 +14,7 @@ import perspective from "@finos/perspective"; import perspective_viewer from "@finos/perspective-viewer"; import "@finos/perspective-viewer-datagrid"; import "@finos/perspective-viewer-d3fc"; +import "@finos/perspective-workspace"; // @ts-ignore import SERVER_WASM from "@finos/perspective/dist/wasm/perspective-server.wasm?url"; @@ -26,12 +27,18 @@ await Promise.all([ perspective_viewer.init_client(fetch(CLIENT_WASM)), ]); -import type * as psp from "@finos/perspective"; +import * as psp from "@finos/perspective"; import type * as pspViewer from "@finos/perspective-viewer"; // @ts-ignore import SUPERSTORE_ARROW from "superstore-arrow/superstore.lz4.arrow?url"; +import * as React from "react"; +import { PerspectiveViewer } from "@finos/perspective-react"; + +import "@finos/perspective-viewer/dist/css/themes.css"; +import "./index.css"; + const WORKER = await perspective.worker(); async function createNewSuperstoreTable(): Promise { @@ -45,12 +52,6 @@ const CONFIG: pspViewer.ViewerConfigUpdate = { group_by: ["State"], }; -import * as React from "react"; -import { PerspectiveViewer } from "@finos/perspective-react"; - -import "@finos/perspective-viewer/dist/css/themes.css"; -import "./index.css"; - interface ToolbarState { mounted: boolean; table?: Promise; diff --git a/packages/perspective-react/test/js/index.css b/packages/perspective-react/test/js/index.css index b9ae4513e0..684ff0e2de 100644 --- a/packages/perspective-react/test/js/index.css +++ b/packages/perspective-react/test/js/index.css @@ -52,3 +52,17 @@ button { font-family: "ui-monospace", "SFMono-Regular", "SF Mono", "Menlo", "Consolas", "Liberation Mono", monospace; } + +.workspace-container { + display: flex; + flex-direction: column; + + .workspace-toolbar { + display: flex; + flex-direction: row; + } + + perspective-workspace { + height: 100vh; + } +} diff --git a/packages/perspective-react/test/js/react.spec.tsx b/packages/perspective-react/test/js/react.spec.tsx index df2beb2187..a096a057e3 100644 --- a/packages/perspective-react/test/js/react.spec.tsx +++ b/packages/perspective-react/test/js/react.spec.tsx @@ -11,19 +11,107 @@ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ import { test, expect } from "@playwright/experimental-ct-react"; -import { PerspectiveViewer } from "@finos/perspective-react"; -import React from "react"; import { App } from "./basic.story"; +import { WorkspaceApp } from "./workspace.story"; +import { HTMLPerspectiveWorkspaceElement } from "@finos/perspective-workspace"; +import { HTMLPerspectiveViewerElement } from "@finos/perspective-viewer"; test.describe("Perspective React", () => { test("The viewer loads with data in it", async ({ page, mount }) => { const comp = await mount(); - const count = await page.evaluate(async () => { - await new Promise((x) => setTimeout(x, 1000)); - return document.querySelectorAll("perspective-viewer").length; + const viewers = comp.locator("perspective-viewer"); + await viewers.waitFor(); + expect(await viewers.all()).toHaveLength(2); + }); + + test("React workspace functionality", async ({ page, mount }) => { + const comp = await mount(); + const toggleMount = comp.locator("button.toggle-mount"); + const addViewer = comp.locator("button.add-viewer"); + const workspace = comp.locator("perspective-workspace"); + const viewer = comp.locator("perspective-viewer"); + + await toggleMount.waitFor(); + await addViewer.click(); + await addViewer.click(); + await addViewer.click(); + await expect(viewer).toHaveCount(3); + await toggleMount.click(); + await workspace.waitFor({ state: "detached" }); + await toggleMount.click(); + await workspace.waitFor(); + await expect(viewer).toHaveCount(3); + }); + + test("Adding a viewer in single-document mode leaves SDM", async ({ + mount, + }) => { + const comp = await mount(); + const addViewer = comp.locator("button.add-viewer"); + const viewer = comp.locator("perspective-viewer"); + const settingsBtn = comp.locator(`perspective-workspace span#label`); + const settingsPanel = viewer.locator("#settings_panel"); + await settingsBtn.waitFor(); + await addViewer.waitFor(); + await addViewer.click(); + expect(await viewer.count()).toBe(2); + await settingsBtn.first().click(); + await settingsPanel.waitFor(); + await addViewer.click(); + expect(await viewer.count()).toBe(3); + await settingsPanel.waitFor({ state: "detached" }); + }); + + test.only("Swapping tables properly loads the new tables and ejects the viewers of removed tables", async ({ + mount, + page, + }) => { + const comp = await mount(); + const addViewer = comp.locator("button.add-viewer"); + const viewer = comp.locator("perspective-viewer"); + await page.pause(); + const swapBtn = comp.locator("button.swap"); + await swapBtn.waitFor(); + await addViewer.click(); + await viewer.waitFor(); + + let rows = await page.evaluate(async () => { + const workspace = document.querySelector( + "perspective-workspace" + ) as HTMLPerspectiveWorkspaceElement; + const viewer = document.querySelector( + "perspective-viewer" + ) as HTMLPerspectiveViewerElement; + await workspace.flush(); + return await (await viewer.getView()).num_rows(); }); + expect(rows).toBe(1); - expect(count).toBe(2); + await swapBtn.click(); + rows = await page.evaluate(async () => { + const workspace = document.querySelector( + "perspective-workspace" + ) as HTMLPerspectiveWorkspaceElement; + const viewer = document.querySelector( + "perspective-viewer" + ) as HTMLPerspectiveViewerElement; + await workspace.flush(); + return await (await viewer.getView()).num_rows(); + }); + expect(rows).toBe(2); + + await swapBtn.click(); + rows = await page.evaluate(async () => { + const workspace = document.querySelector( + "perspective-workspace" + ) as HTMLPerspectiveWorkspaceElement; + const viewer = document.querySelector( + "perspective-viewer" + ) as HTMLPerspectiveViewerElement; + await workspace.flush(); + return await (await viewer.getView()).num_rows(); + }); + expect(rows).toBe(1); }); }); diff --git a/packages/perspective-react/test/js/workspace.story.tsx b/packages/perspective-react/test/js/workspace.story.tsx new file mode 100644 index 0000000000..1f4a118368 --- /dev/null +++ b/packages/perspective-react/test/js/workspace.story.tsx @@ -0,0 +1,148 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ +import "@finos/perspective-workspace"; + +import { + HTMLPerspectiveWorkspaceElement, + PerspectiveViewerWidget, + PerspectiveWorkspaceConfig, + ViewerConfigUpdateExt, +} from "@finos/perspective-workspace"; + +import * as React from "react"; + +import { PerspectiveWorkspace } from "@finos/perspective-react"; + +import perspective from "@finos/perspective"; +import perspective_viewer from "@finos/perspective-viewer"; +import "@finos/perspective-viewer-datagrid"; +import "@finos/perspective-viewer-d3fc"; +import "@finos/perspective-workspace"; +import * as Workspace from "@finos/perspective-workspace"; + +import * as psp from "@finos/perspective"; + +import "@finos/perspective-workspace/dist/css/pro.css"; +import "./index.css"; + +// @ts-ignore +import SERVER_WASM from "@finos/perspective/dist/wasm/perspective-server.wasm?url"; + +// @ts-ignore +import CLIENT_WASM from "@finos/perspective-viewer/dist/wasm/perspective-viewer.wasm?url"; + +await Promise.all([ + perspective.init_server(fetch(SERVER_WASM)), + perspective_viewer.init_client(fetch(CLIENT_WASM)), +]); + +const CLIENT = await perspective.worker(); + +interface WorkspaceState { + mounted: boolean; + config: PerspectiveWorkspaceConfig; + tables: Record>; + /// This object is kept for the 'swap tables' button. + /// It is a backup set of tables that correspond in keys to `tables` + /// but with different data. + swapTables: Record>; + /// if false use `tables` and true use `swapTables` in the workspace + swap: boolean; +} + +export const WorkspaceApp: React.FC = () => { + const [state, setState] = React.useState({ + mounted: true, + tables: {}, + swapTables: {}, + config: { + sizes: [], + viewers: {}, + detail: undefined, + }, + swap: false, + }); + + const onClickAddViewer = React.useCallback(async () => { + const name = window.crypto.randomUUID(); + const data = `a,b,c\n${Math.random()},${Math.random()},${Math.random()}`; + const swapData = `a,b,c\n${Math.random()},${Math.random()},${Math.random()}\n${Math.random()},${Math.random()},${Math.random()}`; + // dont assign internal names to the tables they are not used by the workspace + const t = CLIENT.table(data); + const swap = CLIENT.table(swapData); + const config = Workspace.addViewer(state.config, { + table: name, + title: name, + }); + const tables = { ...state.tables, [name]: t }; + const swapTables = { ...state.swapTables, [name]: swap }; + setState({ + ...state, + tables, + config, + swapTables, + }); + }, [state]); + + const onLayoutUpdate: (detail: { + layout: PerspectiveWorkspaceConfig; + tables: Record>; + }) => void = React.useCallback( + ({ layout, tables }) => { + const newTables = Object.fromEntries( + Object.entries(tables).map(([k, v]) => [k, Promise.resolve(v)]) + ); + setState({ + ...state, + config: layout, + tables: state.swap ? state.tables : newTables, + swapTables: state.swap ? newTables : state.swapTables, + }); + }, + [state] + ); + + const onClickToggleMount = () => + setState((old) => ({ ...old, mounted: !state.mounted })); + + // swaps the tables out but uses the same name of them. + // this keeps the layout the same, but the data within each viewer changes + const swapTables = React.useCallback(() => { + setState({ + ...state, + swap: !state.swap, + }); + }, [state]); + + return ( +
+
+ + + +
+ {state.mounted && ( + + )} +
+ ); +}; diff --git a/packages/perspective-viewer-d3fc/test/js/line.spec.ts b/packages/perspective-viewer-d3fc/test/js/line.spec.ts index be3c5a761e..28dc16e4f2 100644 --- a/packages/perspective-viewer-d3fc/test/js/line.spec.ts +++ b/packages/perspective-viewer-d3fc/test/js/line.spec.ts @@ -122,7 +122,5 @@ test.describe("Line regressions", () => { 0 200 400`); - - await page.pause(); }); }); diff --git a/packages/perspective-workspace/build.js b/packages/perspective-workspace/build.js index f39bce6223..3f0d4d079e 100644 --- a/packages/perspective-workspace/build.js +++ b/packages/perspective-workspace/build.js @@ -152,6 +152,7 @@ async function build_all() { "inherit" ); } catch (e) { + console.error(e.stdout); process.exit(1); } } diff --git a/packages/perspective-workspace/package.json b/packages/perspective-workspace/package.json index f1b7e0e79e..4c5d378429 100644 --- a/packages/perspective-workspace/package.json +++ b/packages/perspective-workspace/package.json @@ -42,6 +42,7 @@ "@lumino/widgets": ">=2 <3", "@lumino/coreutils": ">=2 <3", "@lumino/signaling": ">=2 <3", + "async-mutex": "0.5.0", "lodash": "^4.17.21" }, "devDependencies": { diff --git a/packages/perspective-workspace/src/ts/extensions.ts b/packages/perspective-workspace/src/ts/extensions.ts new file mode 100644 index 0000000000..44e025fa58 --- /dev/null +++ b/packages/perspective-workspace/src/ts/extensions.ts @@ -0,0 +1,51 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +import { HTMLPerspectiveWorkspaceElement } from "./perspective-workspace"; + +type ReactPerspectiveWorkspaceAttributes = React.HTMLAttributes; + +type JsxPerspectiveWorkspaceElement = { + class?: string; +} & React.DetailedHTMLProps< + ReactPerspectiveWorkspaceAttributes, + HTMLPerspectiveWorkspaceElement +>; + +declare global { + namespace JSX { + interface IntrinsicElements { + "perspective-workspace": JsxPerspectiveWorkspaceElement; + } + } +} + +// Custom Elements extensions + +declare global { + interface Document { + createElement( + tagName: "perspective-workspace", + options?: ElementCreationOptions + ): HTMLPerspectiveWorkspaceElement; + querySelector(selectors: string): E | null; + querySelector( + selectors: "perspective-workspace" + ): HTMLPerspectiveWorkspaceElement | null; + } + + interface CustomElementRegistry { + get( + tagName: "perspective-workspace" + ): HTMLPerspectiveWorkspaceElement & typeof HTMLElement; + } +} diff --git a/packages/perspective-workspace/src/ts/perspective-workspace.ts b/packages/perspective-workspace/src/ts/perspective-workspace.ts index 4938387f6a..2580fdce60 100644 --- a/packages/perspective-workspace/src/ts/perspective-workspace.ts +++ b/packages/perspective-workspace/src/ts/perspective-workspace.ts @@ -15,10 +15,14 @@ import { Widget } from "@lumino/widgets"; import { HTMLPerspectiveViewerElement } from "@finos/perspective-viewer"; import type * as psp from "@finos/perspective"; -export { PerspectiveWorkspace } from "./workspace"; +export { + PerspectiveWorkspace, + ViewerConfigUpdateExt, + addViewer, +} from "./workspace"; export { PerspectiveViewerWidget } from "./workspace/widget"; -import "./external"; +export * from "./extensions"; import { PerspectiveWorkspace, PerspectiveWorkspaceConfig, @@ -28,6 +32,8 @@ import { bindTemplate, CustomElementProto } from "./utils/custom_elements"; import style from "../../build/css/workspace.css"; import template from "../html/workspace.html"; +export { PerspectiveWorkspaceConfig }; + /** * A Custom Element for coordinating a set of `` light DOM * children. `` is built on Lumino.js to allow a more @@ -144,8 +150,8 @@ export class HTMLPerspectiveWorkspaceElement extends HTMLElement { async clear() { await this.restore({ sizes: [], - master: { sizes: [] }, - detail: { sizes: [] }, + master: undefined, + detail: undefined, viewers: {}, }); } @@ -192,7 +198,7 @@ export class HTMLPerspectiveWorkspaceElement extends HTMLElement { } /** - * Replace a `Table` by name. As `Table` doe snot guarantee the same + * Replace a `Table` by name. As `Table` does not guarantee the same * structure, this will wipe the viewer's state. * @param name * @param table @@ -262,6 +268,11 @@ export class HTMLPerspectiveWorkspaceElement extends HTMLElement { } } + disconnectedCallback() { + // get perspective-indicator + // delete it. + } + /*************************************************************************** * * Private diff --git a/packages/perspective-workspace/src/ts/workspace/dockpanel.ts b/packages/perspective-workspace/src/ts/workspace/dockpanel.ts index 25e25faa98..394cf17313 100644 --- a/packages/perspective-workspace/src/ts/workspace/dockpanel.ts +++ b/packages/perspective-workspace/src/ts/workspace/dockpanel.ts @@ -13,7 +13,14 @@ import { DockLayout, DockPanel, TabBar, Widget } from "@lumino/widgets"; import { PerspectiveTabBar } from "./tabbar"; import { PerspectiveTabBarRenderer } from "./tabbarrenderer"; -import { PerspectiveWorkspace } from "./workspace"; +import { + PerspectiveLayoutArea, + PerspectiveLayoutConfig, + PerspectiveSplitArea, + PerspectiveTabArea, + PerspectiveWorkspace, + PerspectiveWorkspaceConfig, +} from "./workspace"; import { PerspectiveViewerWidget } from "./widget"; class PerspectiveDockPanelRenderer extends DockPanel.Renderer { @@ -78,7 +85,7 @@ export class PerspectiveDockPanel extends DockPanel { } static getWidgets( - layout: DockPanel.ILayoutConfig + layout: PerspectiveLayoutConfig ): PerspectiveViewerWidget[] { if (!!layout.main) { return PerspectiveDockPanel.getAreaWidgets(layout.main); @@ -88,14 +95,14 @@ export class PerspectiveDockPanel extends DockPanel { } static getAreaWidgets( - layout: DockLayout.AreaConfig + layout: PerspectiveLayoutArea ): PerspectiveViewerWidget[] { - if (layout?.hasOwnProperty("children")) { + if (layout.type === "split-area") { const split_panel = layout as DockLayout.ISplitAreaConfig; return split_panel.children.flatMap((widget) => PerspectiveDockPanel.getAreaWidgets(widget) ); - } else if (layout?.hasOwnProperty("widgets")) { + } else if (layout.type === "tab-area") { const tab_panel = layout as DockLayout.ITabAreaConfig; return tab_panel.widgets as PerspectiveViewerWidget[]; } @@ -107,35 +114,48 @@ export class PerspectiveDockPanel extends DockPanel { return super.widgets() as IterableIterator; } - static mapWidgets( - widgetFunc: (widget: any) => any, - layout: any - ): DockPanel.ILayoutConfig { + /// transforms a layout, either a Lumino DockLayout or a PerspectiveWorkspaceConfig + /// each widget in the layout tree is passed to the mapping function + static mapWidgets( + widgetFunc: (widget: T) => U, + layout: PerspectiveLayoutConfig + ): PerspectiveLayoutConfig { if (!!layout.main) { - layout.main = PerspectiveDockPanel.mapAreaWidgets( - widgetFunc, - layout.main - ); + return { + ...layout, + main: PerspectiveDockPanel.mapAreaWidgets( + widgetFunc, + layout.main + ), + }; } - return layout; + // this is safe because without a main there are no `T`s or `U`s + // within the object, so it can be cast from one to the other. + return layout as unknown as PerspectiveLayoutConfig; } - static mapAreaWidgets( - widgetFunc: (widget: any) => any, - layout: DockLayout.AreaConfig - ): DockLayout.AreaConfig { - if (layout.hasOwnProperty("children")) { - const split_panel = layout as DockLayout.ISplitAreaConfig; - split_panel.children = split_panel.children.map((widget) => - PerspectiveDockPanel.mapAreaWidgets(widgetFunc, widget) - ); - } else if (layout.hasOwnProperty("widgets")) { - const tab_panel = layout as DockLayout.ITabAreaConfig; - tab_panel.widgets = tab_panel.widgets.map(widgetFunc); + static mapAreaWidgets( + widgetFunc: (widget: T) => U, + layout: PerspectiveLayoutArea + ): PerspectiveLayoutArea { + if (layout.type === "split-area") { + const split = layout as PerspectiveSplitArea; + return { + ...split, + children: split.children.map((w: PerspectiveLayoutArea) => + PerspectiveDockPanel.mapAreaWidgets(widgetFunc, w) + ), + }; + } else if (layout.type === "tab-area") { + const tab = layout as PerspectiveTabArea; + return { + ...tab, + widgets: tab.widgets.map(widgetFunc), + }; + } else { + throw new Error("Unknown layout type"); } - - return layout; } onAfterAttach() { diff --git a/packages/perspective-workspace/src/ts/workspace/widget.ts b/packages/perspective-workspace/src/ts/workspace/widget.ts index 0195fa2cf8..84ee75b048 100644 --- a/packages/perspective-workspace/src/ts/workspace/widget.ts +++ b/packages/perspective-workspace/src/ts/workspace/widget.ts @@ -15,6 +15,7 @@ import { Message } from "@lumino/messaging"; import type * as psp_viewer from "@finos/perspective-viewer"; import type * as psp from "@finos/perspective"; +import type { ViewerConfigUpdateExt } from "./workspace"; interface IPerspectiveViewerWidgetOptions { node: HTMLElement; @@ -75,7 +76,7 @@ export class PerspectiveViewerWidget extends Widget { } } - async save() { + async save(): Promise { let config = { ...(await this.viewer.save()), table: this.viewer.getAttribute("table"), diff --git a/packages/perspective-workspace/src/ts/workspace/workspace.ts b/packages/perspective-workspace/src/ts/workspace/workspace.ts index 363010db72..a3e5c5f104 100644 --- a/packages/perspective-workspace/src/ts/workspace/workspace.ts +++ b/packages/perspective-workspace/src/ts/workspace/workspace.ts @@ -12,10 +12,9 @@ import { find, toArray } from "@lumino/algorithm"; import { CommandRegistry } from "@lumino/commands"; -import { SplitPanel, Panel, DockPanel } from "@lumino/widgets"; +import { SplitPanel, Panel, DockPanel, Widget } from "@lumino/widgets"; import uniqBy from "lodash/uniqBy"; -import { DebouncedFunc, isEqual } from "lodash"; -import debounce from "lodash/debounce"; +import { isEqual } from "lodash"; import type { HTMLPerspectiveViewerElement, ViewerConfigUpdate, @@ -32,21 +31,155 @@ const DEFAULT_WORKSPACE_SIZE = [1, 3]; let ID_COUNTER = 0; -export interface PerspectiveLayout { - children?: PerspectiveLayout[]; - widgets?: T[]; +export interface PerspectiveSplitArea { + type: "split-area"; sizes: number[]; + orientation: "horizontal" | "vertical"; + children: PerspectiveLayoutArea[]; } +export interface PerspectiveTabArea { + type: "tab-area"; + currentIndex: number; + widgets: T[]; +} + +export type PerspectiveLayoutArea = + | PerspectiveSplitArea + | PerspectiveTabArea; + export interface ViewerConfigUpdateExt extends ViewerConfigUpdate { table: string; } +/// This is a supertype of Lumino's ILayoutConfig that allows the +/// widgets to be differently typed. Luminos DockLayout can be a +/// PerspectiveLayoutArea, Perspective uses PerspectiveLayoutArea +export interface PerspectiveLayoutConfig { + main: PerspectiveLayoutArea | null; +} + export interface PerspectiveWorkspaceConfig { sizes: number[]; - master: PerspectiveLayout; - detail: PerspectiveLayout; viewers: Record; + detail: PerspectiveLayoutConfig | undefined; + master?: { + sizes: number[]; + widgets: T[]; + }; +} + +function genId(workspace: PerspectiveWorkspaceConfig): string { + let i = `PERSPECTIVE_GENERATED_ID_${ID_COUNTER++}`; + if (Object.keys(workspace.viewers).includes(i)) { + i = genId(workspace); + } + return i; +} + +/// This function takes a workspace config and viewer config and adds the +/// viewer config to the workspace config, returning a new workspace config. +/// This is a slightly different algorithm from the Lumino one, +/// which will be used on internal workspace actions (such as duplication). +/// It currently attaches the viewer using a split-right style, +/// (see Lumino docklayout.ts for documentation on insert modes). +export function addViewer( + workspace: PerspectiveWorkspaceConfig, + config: ViewerConfigUpdateExt +): PerspectiveWorkspaceConfig { + const GOLDEN_RATIO = 0.618; + const id = genId(workspace); + /// ensures that the sum of the input is 1 + /// keeps the relative size of the elements + function normalize(sizes: number[]) { + const sum = sizes.reduce((a, b) => a + b, 0); + return sum === 1 ? sizes : sizes.map((size) => size / sum); + } + + if (!workspace.detail || workspace.detail.main === null) { + return { + sizes: workspace.sizes, + viewers: { + ...workspace.viewers, + [id]: config, + }, + detail: { + main: { + type: "split-area", + sizes: [1], + orientation: "horizontal", + children: [ + { + type: "tab-area", + currentIndex: 0, + widgets: [id], + }, + ], + }, + }, + master: workspace.master, + }; + } else if ( + workspace.detail.main.type === "tab-area" || + (workspace.detail.main.type === "split-area" && + workspace.detail.main.orientation === "vertical") + ) { + return { + sizes: workspace.sizes, + viewers: { + ...workspace.viewers, + [id]: config, + }, + detail: { + main: { + type: "split-area", + sizes: [0.5, 0.5], + orientation: "horizontal", + children: [ + workspace.detail.main, + { + type: "tab-area", + currentIndex: 0, + widgets: [id], + }, + ], + }, + }, + master: workspace.master, + }; + } else if ( + workspace.detail.main.type === "split-area" && + workspace.detail.main.orientation === "horizontal" + ) { + return { + sizes: workspace.sizes, + viewers: { + ...workspace.viewers, + [id]: config, + }, + detail: { + main: { + type: "split-area", + sizes: normalize([ + ...normalize(workspace.detail.main.sizes), + GOLDEN_RATIO, + ]), + orientation: "horizontal", + children: [ + ...workspace.detail.main.children, + { + type: "tab-area", + currentIndex: 0, + widgets: [id], + }, + ], + }, + }, + master: workspace.master, + }; + } else { + throw new Error("Unknown workspace state"); + } } export class PerspectiveWorkspace extends SplitPanel { @@ -60,8 +193,8 @@ export class PerspectiveWorkspace extends SplitPanel { private indicator: HTMLElement; private commands: CommandRegistry; private _menu?: WorkspaceMenu; - private _minimizedLayoutSlots?: DockPanel.ILayoutConfig; - private _minimizedLayout?: DockPanel.ILayoutConfig; + private _minimizedLayoutSlots?: PerspectiveLayoutConfig; + private _minimizedLayout?: PerspectiveLayoutConfig; private _maximizedWidget?: PerspectiveViewerWidget; private _last_updated_state?: PerspectiveWorkspaceConfig; // private _context_menu?: Menu & { init_overlay?: () => void }; @@ -115,7 +248,7 @@ export class PerspectiveWorkspace extends SplitPanel { const indicator = document.createElement("perspective-indicator"); indicator.style.position = "fixed"; indicator.style.pointerEvents = "none"; - document.body.appendChild(indicator); + this.node.appendChild(indicator); return indicator; } @@ -156,7 +289,7 @@ export class PerspectiveWorkspace extends SplitPanel { return this._tables; } - async save() { + async save(): Promise> { const is_settings = this.dockpanel.mode === "single-document"; let detail = is_settings ? this._minimizedLayoutSlots @@ -165,7 +298,7 @@ export class PerspectiveWorkspace extends SplitPanel { // this.getWidgetByName(widget)!.viewer.getAttribute("slot") (widget as PerspectiveViewerWidget).viewer.getAttribute( "slot" - ), + )!, this.dockpanel.saveLayout() ); @@ -190,7 +323,7 @@ export class PerspectiveWorkspace extends SplitPanel { layout.master = master; } - const viewers: Record = {}; + const viewers: Record = {}; for (const widget of this.masterPanel.widgets) { const psp_widget = widget as PerspectiveViewerWidget; viewers[psp_widget.viewer.getAttribute("slot")!] = @@ -203,9 +336,8 @@ export class PerspectiveWorkspace extends SplitPanel { await Promise.all( widgets.map(async (widget) => { - const psp_widget = widget as PerspectiveViewerWidget; - const slot = psp_widget.viewer.getAttribute("slot")!; - viewers[slot] = await psp_widget.save(); + const slot = widget.viewer.getAttribute("slot")!; + viewers[slot] = await widget.save(); viewers[slot]!.settings = false; }) ); @@ -221,7 +353,7 @@ export class PerspectiveWorkspace extends SplitPanel { viewers: viewer_configs = {}, } = structuredClone(value); - if (master && master.widgets!.length > 0) { + if (master && master.widgets && master.widgets.length > 0) { this.setupMasterPanel(sizes || DEFAULT_WORKSPACE_SIZE); } else { if (this.masterPanel.isAttached) { @@ -506,8 +638,10 @@ export class PerspectiveWorkspace extends SplitPanel { widget.viewer.classList.add("widget-maximize"); this._minimizedLayout = this.dockpanel.saveLayout(); this._minimizedLayoutSlots = PerspectiveDockPanel.mapWidgets( - (widget: PerspectiveViewerWidget) => - widget.viewer.getAttribute("slot"), + (widget: Widget) => + (widget as PerspectiveViewerWidget).viewer.getAttribute( + "slot" + )!, this.dockpanel.saveLayout() ); @@ -978,7 +1112,7 @@ export class PerspectiveWorkspace extends SplitPanel { const updated = async (event: CustomEvent) => { this.workspaceUpdated(); // Sometimes plugins or other external code fires this event and - // does not populate this field! + // does not populate this field! const config = typeof event.detail === "undefined" ? await widget.viewer.save() diff --git a/packages/perspective-workspace/tsconfig.json b/packages/perspective-workspace/tsconfig.json index c272ca5fa1..8235b5aaab 100644 --- a/packages/perspective-workspace/tsconfig.json +++ b/packages/perspective-workspace/tsconfig.json @@ -9,5 +9,5 @@ "rootDir": "./src/ts", "moduleResolution": "bundler" }, - "files": ["src/ts/perspective-workspace.ts"] + "include": ["src"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d067c0815d..880224531d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -371,6 +371,46 @@ importers: specifier: ^14.1.1 version: 14.1.1 + examples/react-workspace-example: + dependencies: + '@finos/perspective': + specifier: workspace:^ + version: link:../../rust/perspective-js + '@finos/perspective-react': + specifier: workspace:^ + version: link:../../packages/perspective-react + '@finos/perspective-viewer': + specifier: workspace:^ + version: link:../../rust/perspective-viewer + '@finos/perspective-viewer-d3fc': + specifier: workspace:^ + version: link:../../packages/perspective-viewer-d3fc + '@finos/perspective-viewer-datagrid': + specifier: workspace:^ + version: link:../../packages/perspective-viewer-datagrid + react: + specifier: ^18.0.0 + version: 18.3.1 + react-dom: + specifier: ^18.0.0 + version: 18.3.1(react@18.3.1) + superstore-arrow: + specifier: ^3.0.0 + version: 3.0.0 + devDependencies: + '@types/react': + specifier: ^18 + version: 18.3.8 + '@types/react-dom': + specifier: ^18 + version: 18.3.5(@types/react@18.3.8) + esbuild: + specifier: ^0.25.5 + version: 0.25.5 + http-server: + specifier: ^14.1.1 + version: 14.1.1 + examples/rust-axum: {} examples/vite-example: @@ -418,10 +458,10 @@ importers: version: 0.28.11 file-loader: specifier: ^5 - version: 5.1.0(webpack@5.97.1) + version: 5.1.0(webpack@5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4)) html-webpack-plugin: specifier: ^5.1.0 - version: 5.6.0(webpack@5.97.1) + version: 5.6.0(webpack@5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4)) style-loader: specifier: ^0.18.2 version: 0.18.2 @@ -523,9 +563,15 @@ importers: '@finos/perspective-viewer': specifier: workspace:^ version: link:../../rust/perspective-viewer + '@finos/perspective-workspace': + specifier: workspace:^ + version: link:../perspective-workspace '@types/react': specifier: ^18 version: 18.3.8 + async-mutex: + specifier: 0.5.0 + version: 0.5.0 react: specifier: ^18 version: 18.3.1 @@ -692,6 +738,9 @@ importers: '@lumino/widgets': specifier: '>=2 <3' version: 2.5.0 + async-mutex: + specifier: 0.5.0 + version: 0.5.0 lodash: specifier: ^4.17.21 version: 4.17.21 @@ -3820,6 +3869,9 @@ packages: async-limiter@1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + async-mutex@0.5.0: + resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} + async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} @@ -13632,7 +13684,7 @@ snapshots: webpack: 5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.97.1(esbuild@0.25.5)) - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.97.1)': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack@5.97.1))(webpack@5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4))': dependencies: webpack: 5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.97.1) @@ -13642,7 +13694,7 @@ snapshots: webpack: 5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.97.1(esbuild@0.25.5)) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.97.1)': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack@5.97.1))(webpack@5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4))': dependencies: webpack: 5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.97.1) @@ -13652,7 +13704,7 @@ snapshots: webpack: 5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.97.1(esbuild@0.25.5)) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.97.1)': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack@5.97.1))(webpack@5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4))': dependencies: webpack: 5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.97.1) @@ -13845,6 +13897,10 @@ snapshots: async-limiter@1.0.1: {} + async-mutex@0.5.0: + dependencies: + tslib: 2.8.1 + async@2.6.4: dependencies: lodash: 4.17.21 @@ -14591,7 +14647,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.97.1(esbuild@0.25.5) + webpack: 5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4) css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(esbuild@0.25.5)(webpack@5.97.1(esbuild@0.25.5)): dependencies: @@ -15656,7 +15712,7 @@ snapshots: flat-cache: 4.0.1 optional: true - file-loader@5.1.0(webpack@5.97.1): + file-loader@5.1.0(webpack@5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: loader-utils: 1.4.2 schema-utils: 2.7.1 @@ -16220,7 +16276,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.0(webpack@5.97.1(esbuild@0.25.5)): + html-webpack-plugin@5.6.0(webpack@5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -16228,9 +16284,9 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.97.1(esbuild@0.25.5) + webpack: 5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4) - html-webpack-plugin@5.6.0(webpack@5.97.1): + html-webpack-plugin@5.6.0(webpack@5.97.1(esbuild@0.25.5)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -16238,7 +16294,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.97.1(esbuild@0.25.5) htmlparser2@6.1.0: dependencies: @@ -17568,7 +17624,7 @@ snapshots: dependencies: schema-utils: 4.3.0 tapable: 2.2.1 - webpack: 5.97.1(esbuild@0.25.5) + webpack: 5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4) mini-svg-data-uri@1.4.4: {} @@ -19842,25 +19898,25 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - terser-webpack-plugin@5.3.11(esbuild@0.25.5)(webpack@5.97.1(esbuild@0.25.5)): + terser-webpack-plugin@5.3.11(esbuild@0.25.5)(webpack@5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 terser: 5.37.0 - webpack: 5.97.1(esbuild@0.25.5) + webpack: 5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4) optionalDependencies: esbuild: 0.25.5 - terser-webpack-plugin@5.3.11(esbuild@0.25.5)(webpack@5.97.1): + terser-webpack-plugin@5.3.11(esbuild@0.25.5)(webpack@5.97.1(esbuild@0.25.5)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 terser: 5.37.0 - webpack: 5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.97.1(esbuild@0.25.5) optionalDependencies: esbuild: 0.25.5 @@ -20306,9 +20362,9 @@ snapshots: webpack-cli@5.1.4(webpack@5.97.1): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.97.1) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.97.1) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.97.1) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack@5.97.1))(webpack@5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4)) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack@5.97.1))(webpack@5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4)) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack@5.97.1))(webpack@5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4)) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.6 @@ -20440,7 +20496,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.11(esbuild@0.25.5)(webpack@5.97.1) + terser-webpack-plugin: 5.3.11(esbuild@0.25.5)(webpack@5.97.1(esbuild@0.25.5)(webpack-cli@5.1.4)) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: diff --git a/rust/perspective-server/cpp/perspective/build.mjs b/rust/perspective-server/cpp/perspective/build.mjs new file mode 100644 index 0000000000..cc781e06e8 --- /dev/null +++ b/rust/perspective-server/cpp/perspective/build.mjs @@ -0,0 +1,69 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +import { execSync } from "node:child_process"; +import os from "node:os"; +import path from "node:path"; +import * as url from "node:url"; + +const __dirname = url.fileURLToPath(new URL(".", import.meta.url)).slice(0, -1); + +const stdio = "inherit"; +const env = process.env.PSP_DEBUG ? "debug" : "release"; +const cwd = path.join(process.cwd(), "dist", env); + +const { compress } = await import("pro_self_extracting_wasm"); + +delete process.env.NODE; + +let cmake_flags = ""; +let make_flags = ""; + +if (!!process.env.PSP_BUILD_VERBOSE) { + cmake_flags += "-Wdev --debug-output "; + make_flags += "VERBOSE=1 "; +} else { + cmake_flags = "-Wno-dev "; // suppress developer warnings +} + +try { + execSync(`mkdirp ${cwd}`, { stdio }); + process.env.CLICOLOR_FORCE = 1; + execSync( + `emcmake cmake ${__dirname} ${cmake_flags} -DCMAKE_BUILD_TYPE=${env} -DRAPIDJSON_BUILD_EXAMPLES=OFF`, + { + cwd, + stdio, + } + ); + + execSync( + `emmake make -j${process.env.PSP_NUM_CPUS || os.cpus().length + } ${make_flags}`, + { + cwd, + stdio, + } + ); + + execSync(`cpy web/**/* ../web`, { cwd, stdio }); + execSync(`cpy node/**/* ../node`, { cwd, stdio }); + if (!process.env.PSP_HEAP_INSTRUMENTS) { + compress( + `../../cpp/perspective/dist/web/perspective-server.wasm`, + `../../cpp/perspective/dist/web/perspective-server.wasm` + ); + } +} catch (e) { + console.error(e); + process.exit(1); +} diff --git a/rust/perspective-server/cpp/perspective/package.json b/rust/perspective-server/cpp/perspective/package.json new file mode 100644 index 0000000000..330a6ea205 --- /dev/null +++ b/rust/perspective-server/cpp/perspective/package.json @@ -0,0 +1,19 @@ +{ + "name": "@finos/perspective-cpp", + "private": true, + "author": "The Perspective Authors", + "license": "Apache-2.0", + "version": "3.7.4", + "main": "./dist/esm/perspective.cpp.js", + "files": [ + "dist/esm/**/*", + "dist/cjs/**/*" + ], + "scripts": { + "build": "node ../../tools/perspective-scripts/run_emsdk.mjs node ./build.mjs", + "clean": "rimraf dist" + }, + "devDependencies": { + "pro_self_extracting_wasm": "0.0.9" + } +} diff --git a/rust/perspective-server/cpp/protos/perspective.proto b/rust/perspective-server/cpp/protos/perspective.proto new file mode 100644 index 0000000000..459192e2b4 --- /dev/null +++ b/rust/perspective-server/cpp/protos/perspective.proto @@ -0,0 +1,540 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +syntax = "proto3"; + +import "google/protobuf/struct.proto"; + +package perspective.proto; + +option optimize_for = LITE_RUNTIME; + +//////////////////////////////////////////////////////////////////////////////// +// +// Common + +enum StatusCode { + SERVER_ERROR = 0; + VIEW_NOT_FOUND = 1; + TRANSPORT_ERROR = 2; +} + +// Recoverable, user-readable error reporting from the engine. +message ServerError { + string message = 1; + StatusCode status_code = 2; +} + +message Schema { + repeated KeyTypePair schema = 1; + message KeyTypePair { + string name = 1; + ColumnType type = 2; + } +} + +// The data type constructors Perspective supports. +message MakeTableData { + oneof data { + Schema from_schema = 1; + string from_csv = 2; + bytes from_arrow = 3; + string from_rows = 4; + string from_cols = 5; + string from_view = 6; + string from_ndjson = 7; + }; +} + +// Filter type scalars - this is _not_ the same as a Columns scalar, as this +// value is used in the view config and must be JSON safe! +message Scalar { + oneof scalar { + bool bool = 1; + // int64 date = 2; // TODO these are the wrong type + // int64 datetime = 3; + double float = 4; + // int32 int = 5; + string string = 6; + google.protobuf.NullValue null = 7; + } +} + +// View types +enum ColumnType { + STRING = 0; + DATE = 1; + DATETIME = 2; + INTEGER = 3; + FLOAT = 4; + BOOLEAN = 5; +} + +// Options for requresting a slice of data, starting with the rectangular +// viewport. +message ViewPort { + optional uint32 start_row = 1; + optional uint32 start_col = 2; + optional uint32 end_row = 3; + optional uint32 end_col = 4; +// optional bool id = 5; +// optional bool index = 3; +// optional bool formatted = 6; +// optional bool leaves_only = 7; +// optional bool compression = 3; +} + +// TODO This belongs in features +enum SortOp { + SORT_NONE = 0; + SORT_ASC = 1; + SORT_DESC = 2; + SORT_COL_ASC = 3; + SORT_COL_DESC = 4; + SORT_ASC_ABS = 5; + SORT_DESC_ABS = 6; + SORT_COL_ASC_ABS = 7; + SORT_COL_DESC_ABS = 8; +} + + + +//////////////////////////////////////////////////////////////////////////////// +// +// RPC + +message Request { + uint32 msg_id = 1; + string entity_id = 2; + oneof client_req { + // Minimum Virtual API (theoretical). + GetFeaturesReq get_features_req = 3; + GetHostedTablesReq get_hosted_tables_req = 4; + RemoveHostedTablesUpdateReq remove_hosted_tables_update_req = 37; + TableMakePortReq table_make_port_req = 5; + TableMakeViewReq table_make_view_req = 6; + TableSchemaReq table_schema_req = 7; + TableSizeReq table_size_req = 8; + TableValidateExprReq table_validate_expr_req = 9; + ViewColumnPathsReq view_column_paths_req = 10; + ViewDeleteReq view_delete_req = 11; + ViewDimensionsReq view_dimensions_req = 12; + ViewExpressionSchemaReq view_expression_schema_req = 13; + ViewGetConfigReq view_get_config_req = 14; + ViewSchemaReq view_schema_req = 15; + ViewToArrowReq view_to_arrow_req = 16; + + // Optional (we can enable real-time/autocomplete/etc with these, but + // not required). + ServerSystemInfoReq server_system_info_req = 17; + ViewCollapseReq view_collapse_req = 18; + ViewExpandReq view_expand_req = 19; + ViewGetMinMaxReq view_get_min_max_req = 20; + ViewOnUpdateReq view_on_update_req = 21; + ViewRemoveOnUpdateReq view_remove_on_update_req = 22; + ViewSetDepthReq view_set_depth_req = 23; + ViewToColumnsStringReq view_to_columns_string_req = 24; + ViewToCSVReq view_to_csv_req = 25; + ViewToRowsStringReq view_to_rows_string_req = 26; + ViewToNdjsonStringReq view_to_ndjson_string_req = 36; + + // External (we don't need these for viewer, but the developer may). + MakeTableReq make_table_req = 27; + TableDeleteReq table_delete_req = 28; + TableOnDeleteReq table_on_delete_req = 29; + TableRemoveDeleteReq table_remove_delete_req = 30; + TableRemoveReq table_remove_req = 31; + TableReplaceReq table_replace_req = 32; + TableUpdateReq table_update_req = 33; + ViewOnDeleteReq view_on_delete_req = 34; + ViewRemoveDeleteReq view_remove_delete_req = 35; + } +} + +message Response { + uint32 msg_id = 1; + string entity_id = 2; + oneof client_resp { + GetFeaturesResp get_features_resp = 3; + GetHostedTablesResp get_hosted_tables_resp = 4; + RemoveHostedTablesUpdateResp remove_hosted_tables_update_resp = 37; + TableMakePortResp table_make_port_resp = 5; + TableMakeViewResp table_make_view_resp = 6; + TableSchemaResp table_schema_resp = 7; + TableSizeResp table_size_resp = 8; + TableValidateExprResp table_validate_expr_resp = 9; + ViewColumnPathsResp view_column_paths_resp = 10; + ViewDeleteResp view_delete_resp = 11; + ViewDimensionsResp view_dimensions_resp = 12; + ViewExpressionSchemaResp view_expression_schema_resp = 13; + ViewGetConfigResp view_get_config_resp = 14; + ViewSchemaResp view_schema_resp = 15; + ViewToArrowResp view_to_arrow_resp = 16; + ServerSystemInfoResp server_system_info_resp = 17; + ViewCollapseResp view_collapse_resp = 18; + ViewExpandResp view_expand_resp = 19; + ViewGetMinMaxResp view_get_min_max_resp = 20; + ViewOnUpdateResp view_on_update_resp = 21; + ViewRemoveOnUpdateResp view_remove_on_update_resp = 22; + ViewSetDepthResp view_set_depth_resp = 23; + ViewToColumnsStringResp view_to_columns_string_resp = 24; + ViewToCSVResp view_to_csv_resp = 25; + ViewToRowsStringResp view_to_rows_string_resp = 26; + ViewToNdjsonStringResp view_to_ndjson_string_resp = 36; + MakeTableResp make_table_resp = 27; + TableDeleteResp table_delete_resp = 28; + TableOnDeleteResp table_on_delete_resp = 29; + TableRemoveDeleteResp table_remove_delete_resp = 30; + TableRemoveResp table_remove_resp = 31; + TableReplaceResp table_replace_resp = 32; + TableUpdateResp table_update_resp = 33; + ViewOnDeleteResp view_on_delete_resp = 34; + ViewRemoveDeleteResp view_remove_delete_resp = 35; + ServerError server_error = 50; + } +} + +//////////////////////////////////////////////////////////////////////////////// +// +// Virtual API + +// Informs the client of the feature set, e.g. what to expect in the +// `ViewConfig` message. +message GetFeaturesReq {} +message GetFeaturesResp { + bool group_by = 1; + bool split_by = 2; + bool expressions = 3; + map filter_ops = 4; + + message ColumnTypeOptions { + repeated string options = 1; + } +} + +// `Client::get_hosted_tables` +message GetHostedTablesReq { + bool subscribe = 1; +} + +message GetHostedTablesResp { + repeated HostedTable table_infos = 1; +} + +message HostedTable { + string entity_id = 1; + optional string index = 2; + optional uint32 limit = 3; +} + +message RemoveHostedTablesUpdateReq { + uint32 id = 1; +} +message RemoveHostedTablesUpdateResp {} + +// `Table::size` +message TableSizeReq {} +message TableSizeResp { + uint32 size = 2; +} + +// `Table::schema` +message TableSchemaReq {} +message TableSchemaResp { + Schema schema = 1; +} + +// `Table::validate_expressions` +// TODO: This should be just `validate()` +message TableValidateExprReq { + map column_to_expr = 1; +} +message TableValidateExprResp { + map expression_schema = 1; + map errors = 2; + map expression_alias = 3; + message ExprValidationError { + string error_message = 1; + uint32 line = 2; + uint32 column = 3; + } +} + +// `Table::view` +message TableMakeViewReq { + string view_id = 1; + ViewConfig config = 2; +} +message TableMakeViewResp { + string view_id = 1; +} + +// `View::schema` +message ViewSchemaReq {} +message ViewSchemaResp { + map schema = 1; +} + +// `View::dimensions` +message ViewDimensionsReq {} +message ViewDimensionsResp { + uint32 num_table_rows = 1; + uint32 num_table_columns = 2; + uint32 num_view_rows = 3; + uint32 num_view_columns = 4; +} + +// `View::get_config` +message ViewGetConfigReq {} +message ViewGetConfigResp { + ViewConfig config = 1; +} + + +//////////////////////////////////////////////////////////////////////////////// + +// `Client::table`. +message MakeTableReq { + MakeTableData data = 1; + optional MakeTableOptions options = 2; + message MakeTableOptions { + oneof make_table_type { + string make_index_table = 1; + uint32 make_limit_table = 2; + }; + } +} +message MakeTableResp {} + +// `Table::delete` +message TableDeleteReq { + bool is_immediate = 1; +} +message TableDeleteResp {} + +// `Table::on_delete` +message TableOnDeleteReq {} +message TableOnDeleteResp {} + +// `Table::make_port` +message TableMakePortReq {} +message TableMakePortResp { + uint32 port_id = 1; +} + +// `Table::remove_delete` +message TableRemoveDeleteReq { + uint32 id = 1; +} +message TableRemoveDeleteResp {} + +// `Table::update` +message TableUpdateReq { + MakeTableData data = 1; + uint32 port_id = 2; +} +message TableUpdateResp {} + +// `Table::replace` +message TableReplaceReq { + MakeTableData data = 1; +} +message TableReplaceResp {} + +// `Table::remove` +message TableRemoveReq { + MakeTableData data = 1; +} +message TableRemoveResp {} + +message ViewOnUpdateReq { + enum Mode { + ROW = 0; + } + optional Mode mode = 1; +} +message ViewOnUpdateResp { + optional bytes delta = 1; + uint32 port_id = 2; +} + +message ViewOnDeleteReq {} +message ViewOnDeleteResp {} + +message ViewRemoveDeleteReq { + uint32 id = 1; +} +message ViewRemoveDeleteResp {} + +message ViewToColumnsStringReq { + ViewPort viewport = 1; + optional bool id = 2; + optional bool index = 3; + optional bool formatted = 4; + optional bool leaves_only = 5; +} + +message ViewToColumnsStringResp { + string json_string = 1; +} + +message ViewToRowsStringReq { + ViewPort viewport = 1; + optional bool id = 2; + optional bool index = 3; + optional bool formatted = 4; + optional bool leaves_only = 5; +} + +message ViewToRowsStringResp { + string json_string = 1; +} + +message ViewToNdjsonStringReq { + ViewPort viewport = 1; + optional bool id = 2; + optional bool index = 3; + optional bool formatted = 4; + optional bool leaves_only = 5; +} + +message ViewToNdjsonStringResp { + string ndjson_string = 1; +} + +message ViewToArrowReq { + ViewPort viewport = 1; + optional string compression = 2; +} + +message ViewToArrowResp { + bytes arrow = 1; +} + +message ViewColumnPathsReq {} + +// // TODO This is a better paths representations but its not compatible with +// // the legacy API. Let's do this when we can fix the API. + +// message ColumnPath { +// repeated string path = 1; +// } + +message ViewColumnPathsResp { + repeated string paths = 1; + // repeated ColumnPath paths = 1; +} + +message ViewDeleteReq {} +message ViewDeleteResp {} + +message ViewGetMinMaxReq { + string column_name = 1; +} + +message ViewGetMinMaxResp { + string min = 1; + string max = 2; +} + + +message ViewExpressionSchemaReq {} +message ViewExpressionSchemaResp { + map schema = 1; +} + +message ViewToCSVReq { + ViewPort viewport = 1; +} + +message ViewToCSVResp { + string csv = 1; +} + +message ViewRemoveOnUpdateReq { + uint32 id = 1; +} +message ViewRemoveOnUpdateResp {} + +message ViewCollapseReq { + uint32 row_index = 1; +} + +message ViewCollapseResp { + uint32 num_changed = 1; +} + +message ViewExpandReq { + uint32 row_index = 1; +} + +message ViewExpandResp { + uint32 num_changed = 1; +} + +// `View::set_depth` +message ViewSetDepthReq { + uint32 depth = 1; +} +message ViewSetDepthResp {} + +message ServerSystemInfoReq {} +message ServerSystemInfoResp { + uint64 heap_size = 1; + uint64 used_size = 2; + uint32 cpu_time = 3; + uint32 cpu_time_epoch = 4; +} + + +message ViewConfig { + repeated string group_by = 1; + repeated string split_by = 2; + ColumnsUpdate columns = 3; + repeated Filter filter = 4; + repeated Sort sort = 5; + map expressions = 6; + map aggregates = 7; + FilterReducer filter_op = 8; + optional uint32 group_by_depth = 9; + + message AggList { + repeated string aggregations = 1; + } + + message Sort { + string column = 1; + SortOp op = 2; + } + + message Filter { + string column = 1; + string op = 2; + repeated Scalar value = 3; + } + + enum FilterReducer { + AND = 0; + OR = 1; + } +} + +message ColumnsUpdate { + oneof opt_columns { + google.protobuf.NullValue default_columns = 1; + Columns columns = 2; + } + + message Columns { + repeated string columns = 1; + } +} diff --git a/rust/perspective-viewer/src/rust/custom_elements/viewer.rs b/rust/perspective-viewer/src/rust/custom_elements/viewer.rs index 0b1da34310..95164a538b 100644 --- a/rust/perspective-viewer/src/rust/custom_elements/viewer.rs +++ b/rust/perspective-viewer/src/rust/custom_elements/viewer.rs @@ -262,7 +262,7 @@ impl PerspectiveViewerElement { /// Restart this `` to its initial state, before /// `load()`. /// - /// Use `Self::restart` if you plan to call `Self::load` on this viewer + /// Use `Self::eject` if you plan to call `Self::load` on this viewer /// again, or alternatively `Self::delete` if this viewer is no longer /// needed. pub fn eject(&mut self) -> ApiFuture<()> { diff --git a/tools/perspective-test/results.tar.gz b/tools/perspective-test/results.tar.gz index 26eabb4d5800f102708e327278d0ac9a409ff9bd..e45eab831113cafea49caf112ba6303053cca13c 100644 GIT binary patch literal 134829 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�JZv#|z!NrWE+OqU+ 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

vU7S83CbPSPxhag}2jrsKT?mfdkZQ5D{ z!ru30=IY3OD{HX$=cQX@O3WbyBQY>`jB3N;))yZ;{F(3QnC+V@^fkZ;E%t`0SC{41 z;+dW=F04GkqR8KWI}ya0HkDPJS#nnJZ>U8rQouOb!iEjjlk9hQ2qqfDEy}EAfn@`+QI4L->k%CT2dK@3T|S!E7UaLc zSqAn~Q-Nb(^;l(W7hITIU~-c6PPOw1>^lsiAsEiDO86I}>+7 z5>H3yn@EmD69Ukc&+7I^lS`)-q~dabvfHBD zoks_Z?bYd!??a8{a%S*%r%>|-AevdJ7D+ZMcWGyj*%`Q-cMBgGfEu zY?mKa*IhA!46d55p6<+sSF+6-{HEW*2c5<7G8Do>lG@R3o7Xl3?T*B~caHeNI+R%b z9_h6W(*N=wzTm%nvfVIW5V){37A7`b7VDa$!hT#-U`p<~PPX{Qh62#LIAZ;jA7<89 z7VeU3+Bdd*xsF7^RifjAK2Mw3h`aahssQ+#HG6=40Qc%*J&<8NsFY#kqdR?Chn&qA zas6~$0etxh4%kjdherCfiIR|nh#I2~-8a4bT;gDOsP$Cz zd-^f|9}vRMl^1gdI2r#>-vmXg)@~xZ-BqXe=ZEXt+o7YLrXMT?-aCnm zw9FcO6}r+I@_rHxY%tamI+AW>?L$Q({N*(B|Hgu7hKJ`8r zZQ{aZpCIcvDk<5k)BSH4NMBV073|<~YN0kvNNYTlxSkPme4VkzjZ*r#-Y_+!-h0k} z*bg-C(X9WnA6F3GMJg$V*I|m)7`Cj~Vj5W-pb&j`jRG20i$^7)`~6N%_6~f{WavY+ zweLhiO+p&Y2&ah_>D(K_Si3uTgf01GWmudBd`(b(wJ$vyhJuom@`{$5Nq4CIP|n+O zeLcKpt$&JTx<3B1#!^-37fYhn8$t)(ax4o4x-C{uK8Au9L|i0xD$39BR0=qL-@%BxG=Fl$+f((BOcTUlVn@88>m&Ak|&E#$mvFfuQP@GFY$2@r1~X62-+;s za_QYTkfd^b5s8lwG_;c(RSior@WZ8RlfI_HgPPlYaq3ew-JYSn4R;T67Sp8CI2JX) z3q!218a)T({1@19JPQB|P0*PWi6tHkD{g00C*77N1#0G2%UO@j&(}lq;%P?(G<$+c zdmM<#;GmShNVW+CipZWN3XEC{ChXA#dID5QN_k8Ecf^BhAKA++2kISQ*w$9hpIv^! zd=Q}csi#1_K>Ue>rTpGQ*$eoV>)HDO4%jq%!{a#FMwoxT5<{235Ze>%UWtM&gR8?% zpnob9E$^hYCI4YA5`SCJh^gj zs8~glTKmo;q|qEk=r@=7L?6f5EZMN4mPs6!be0zNgEE+!2uO- z01g~}Q1v$z&H}aoMRme}bV&+?Igbr_{5~1TwqD z^JDm}JSk8xQPN3FQMBZBOL!7Q_Hsq?22*L|220dnQ4u>- z)?p_ZeYczATzX@W8?p2pj8%!K{iZ}Kbo0!_>b|u|Ca|^m6UH{uDScycKONzayY})_ zm?{MG_B#0Zt~L1g;0;N8>Chu2c=su%{7>rTF+#)HYQY6mXP~!gn=^}a_g|d4xES9 zou9;h&#XSWS#);850!0#M;Cs9!52{c2btou_4vTn-t6&N3DHVhAtsdrj^`_Ole&MKJxjX!m z@fc$ke=Ic;aBRjC_HBC*``jD)&iytAA3CQdxi6cRARxPfDX`U)*rL~CK9KhS2;s~E zAshh=ni$X;AcWHegmAop5Y96Y!U0_YLO9+)2nR;^g$q9GWd^hk2;oEmAsj9%AcQjl zgmB`45KbZx!lC*p$gR<=h6{+D6x32N9Vb(WUAlIkSco9uRvRK?QU3L1RQnqOp;Hx` z{iLdWQm$1GA%PfHRGTD{!X!H?8T0Z4ra@b-t3!Ilp+P!ztU`JjN&pjoHYik1jsmK0 zH&slh+%6F5;0kJKb%tTr%M{gg=Yg!fwubvrV9gX&&_`0}Er}^(@QBI<7iUV0&XY7K zdZK{IRnU*j+D(ptrI#)ywQgW%?t}Yfe}v_$FK^PWcmtxZ_1#8N)^6_B!XrwI#g!4m z+bBm}oXLx)*4ffXGu`(Bgg@`1O=WHq?CEn^gUhOLcaQ4fYZ~>aWMUJLX~=K0(^jXn zR@G!m6foZM&obC!j)K^Qk=L%-jmDEjsf=WiXGfH(P!8pw6%b{Yz0PgK+GM|K>ChsW zQXqa7D1r{b862esGGJ*5r0eP`Wu_CBF=JfVg)dt6F(PByLy9&mxWg=|aPT9DW-D4P zMH`QiqyCo2Cl2clMXInkPD+&_mJ{(@C@u=(hhU|XxKkczN>fT(5xZay7FJn2;G}?S z;inMPR(406OLR2GPNg7Y;kKq0eM?dph%deg71E4+rGp9fQlo)_GZ+9>gei^LwT%am zL9$$HI!GEQsX|i*r!V9RmnPF2Mvx;9HIS1^PP3oKD~Uu=MTTcf*za1vkkA>7z4G(5 zJHj#=AA*fi{~D|Dtd@+rCk_Y>5p36=ON|6UnHz<%Rf@SeC>#iEVLke(lD5GiMvf|U zJ532|@C!|{R^&|^WvzfRIJ#^lip;!SqsxW89Tm z2Rg?1eWe)9%cI5uuWFrR3c@g&GUC)n`8{S$VN?EF895vL(41YksBKxIm{fgYNjTUt zxt2IXF*kANLO89@0oJ9QJ(|gTtFcmNE;4@0W>dh_g@pbhbHaJ5qyvT!GTl!d1arFl zXeIK-{4!S*vt17^Xo^P2&y4T zn(ONr>-4>=EvOj3NfG6st6L!sv97}qm|(-@C!_pnwjox0(iDDwuOn*GZJ(tPF}FCa zZhw$nChFB#C1LmocibTOrhd^xy;NL9$@vqRi$kg5sAaL3mUFm9QJmmU2^R%>>eOY7oT2 zSaOP?_prn6+%yW=zF2HjdQ~U}NG@>45Qs`LSdpmTN+tQzFh5&AOqi7FBBv9j2BjmI z&aZ-t?LiDR$;TC=RVqOW5iJ|hQ5O_Pl;nk!EyV&n$mh`}xJ7v7OGUNN)B9=*UQ z+%7=A4Ae1%$aH0+5{!9jkde?!K#B&ZL7bsGQY~HVsjG3&u?O0q-H}VdV*qq4VVi!elAu{xLw z=w9-HCN%}m-XKoD*c!=oqIs~aV~3Zcv`Vo?)7J6;Ch);dsc0o?>zaw(pF?9|!JNFw zeEGP-vSHOvqvwaM+QduHBY9@_$#g>`ad9a{L9YR+i~vFgzTGkR^)lKs8EHJ1mJWq7 zQH(|TdYl-OsD|q!!3FUUG6ul~_s+Av6RHD+v;w}GHXn!=SmJSkzamaai12L%_A!0O^uLBxE&WI3F5+cmfmdMVQYwZXqz_rwN zoJk0Jm-2m;GKujLY_gvO05NIFgyGW_jC@V7daxvz`cUF&9xkj$(VZF?aMfbo7fo(7 zQl8yjkO!8sVO*f1Q+MR7r5XM(}MP~Y^l7h^Z9Au%a59+^65&b6ivJz4`qo{FavH$ zDR%(@X#BsyB*yW_ykDISN#&KsmCBi8G&}=>VR(~4zQn%m7v@;MT|FD0p?{G<7_!O3 zv9+JZE)>bGQhQ`p{ub4vX75;E^INE1%4dUtv&dkI_0P;GReY`l9cF;INlK>p zBRz#UXb|>UbD7w0>inu9xZ*}*YKK^=Sh6M%RWLFFoDU|mDi|$>fZ)BDW%Wtv#7y#_ zfGI0qv{*WEZI;*_a=~Ic`BweFrc|zAiO|M#jofE;sADT3XPLHAhQ*yYbQz_&cl2x$ z*gZNrWo6W%c;fRD;qXZ&vbD*C6k9>)LJV^_(c5eRqe(IgbtVx9avlvbSdB1^zCLJq zNkkP(TxrBWGK!8X)7#Gq-7Q}IQ}f81dHg7e_P%VgvFwEj=2E4kVc$Hy1ag~Wu0)u=*7a%*D=2pr z%i>2O=`+!)Pu>-B>X&|V)G=3l+FAkFaWAn1rh8r$RLVQs_f}iW9*YfF;JgLiOds@~ zp8}odr(fBg6rTg2N1puqB*1Qap78|?+?$uKdt}bxI}Ghw5;#{5?k!TJ0{%zn8)T|Y z0{&(5bs+}Wj;XlR>!5x$26GN}0BCLsH#ba4I4)OfT!yw+J144MFe<${W1Mtl{Luw> z%wlChwaJ%JIgP+wX{+a-k)tpJMZ>+(u}1<@2jomb$e5kxGf;`kozW;lq9sC7#3T{5 z=M9)2LBz#OETk;dhN8{|0qF;lNnfQzO@*NtG;lZv%C+r7$YXGZ3Y$it87xNMP^u_~ z>94{NP&>U`z=vzF4FfYtf3KDx&a*9}U|GWp7qgnuPWDq^lC4QAm50Os-Yp!h)%lqo zt6>T?a+pKLc9^a`4$EkGW;Ld|cS~^`U3PN&D_J5S9o{=EfR;FcTLlH@!7W2s2QyQF@38%DCAXnO)S8J^)Og7$N%)!n3BNABR zES6B+X#bd2#)Q5+tZ4<8g>amVO{;Uyk08H%E=zCsIT zg|=C-Ia7=iX1`nJunRLc|^G={YrSONthYH5S&c-HxCuo*nHr6 zM-tb4RTX41(j@c zyKe;C$()BokK7qIhNz^6bYEQ+sNZFOy9*||(}oX8HoL8yxGku;ElRpAa=WcuE~{)Q zLt#|j-}*J&DHY?M#IqwxbM~F)ik;?+o@T$?df}VO*7wzP&Qj(lIp|J)lTN-EcQ0J0 z@2S_7NseVnkH3=9@3JWlaub_S)F5&ZX=SMLX++Tfs2Ppu2xBI?n&3q zNv;k_H#TU=Uy!1<{`_cOVlmJ+F2==Ng+NzlmUFWj~IJ+AQpN5u>-HYG%AU+Xiz77mW`V zQIcKN*ZzZ<6>P7mp|Nb1W6Z3GqxJ238F*(N%GpFt}^)!{ekhBZlhNC?3YRwCw8X#=Wk z5Sa1@>6IC6LXIoxGHPdcmY&6&8vgPodG4Pnpvdjzj1`m~C?`C(@F1KGZ;sd~VW_rS zq5>%24?&6cZ~{NO=bLVvH$kI+8hiC-DA4G4`%+Q{=WH zxPdl;gu!2<{+^;bYvSEKF@sO_#ebYKVK)QTB7zd;_UESRuFVTW(q6+L&iL|xGB;cP zzGp7^xcey%?hr$Hrru(j@7Jy;NpT$igD}Yq& z8B$GB+Z5%GC%p?hzq+c#8ktDviZc_(;0kz#L*CbKm0o8XSwZq1ER)Sf=1xydCQ2Om&@^yw0VMu6SJMm$V z@=2keP``#L53X<5j~S@QqId-05SAb6qu9{Y))HVTQK-%u5((f5A;MBYA#!)oJ_oiU zNpAP{eDsCJ_YqFdcA+S=p>WA|etHe#N4QC#Dfv7fM!LtQ_0b6K37no8&eL4hy~x9t zgkkkWMhFrPOL@8{6ir|_DWn<o&GK1CeMEd)doNA(U$QmAEy! z%>Cx;HY%TzU4)LJtba(mEuQ6icOn~tiJ{U}M*%2}_ z4@3efe(yf=R<5I7ay|L3J1#j9YaM7EiA}WThIp;rB;&IqYK_?>B2TrlH ztgCyHB252+sx7=CvqM<~pfDSjRB{pBaE7rF-ZrQ zOY>^oc-+r1vXrThwa6MaMe`^HyI)tg47R!|8_^SIJ^>9{-)FE-@LPlM!oIDNJZxWS zHmqhfMD_80wqT?m9Ml-#!4lW*(^8nImQZ%TM4!MUvh`qe44)19F5U_U!t>OFstNvk zSga+Xv0@^NgrtK)D-9%X$CWGX4r6xTN1`N zBozI+AQcu^5=VuoATPyqc=5S^@4K03B0;|VJI89kNGM7T7f&fTv5G8M;2lxjAZD9i zdl)@wSb?^op`3Jhi6yD=9l0rXkd(cDzNq~P1|Hy*K91q$72dHX>6&D#xapN#lOld# z;C8tmce##$tvr;<3`B1bzH@Af3AbFe;V9DZtAa%eImf{w>xYo5DT0@k$M)40sGZ(= z__yW`x8AHbbF|8Vsmt8?cR>N=&=zeFJ?SNjL5&I*tq_eW7fr)LJ@g~-NR-hbvYqu& z)o}6N7Uq*5?^oT2#TVWC*J!!*WITEH^oYpg-Rna111=|0@F*x5jMZK{aZ2W@DI^LmdWlAGz!et!Jv z80ZPdNmQlo_iPToQb@l*Zm!P&*KTS94T{2UKd2-oR4u zoxVtZuT)1Kc3Vf<{kj!_P^5e!z)f&sSWJdR14~R#nlf8g8U#w6je*}UzlNt$r{9&J8+qIE&?0aEik5M^iar?iPM&v1sad z5+@%?Xl3Xzs>$V=pT>Eq4Ywai9OOmnpl|H$T}X)!-5m4`*Z#cpi5CISl_c62&Ct3c zq8gN%xh|t<;LHt7Sq~>gL1@aJRH}$YQeWO!iCW0b$<#}!=mTA?=#{@` z67PV0CFK-AhCm7#?*}QU9{0R$R?vn3vLxh~u;DAzQkW4q$-m8E86_nmF7b)~oTC#D zhYXFYbKBRybyZjPbTyJZFrVxe@!u(52{)qn%2EH&B!_Lm$LO_laj2M&Pz_40N&+zq z{4xP<Bk3ArB+1wXgHWd2XCMo4*T58{8oQwI87un*bPQIY= zS*kB$`>N@;@6%E!gu71^K)JOof+)%6y9n}&cBXPLjNw5Ud!!?x_i{mPJdscA5En69 zbZfnPpTXM~)V>&rz1z>-g@vIgJ>TYn5q%;bZ>(?`;DBCtDX^zr;1ID*2aE5M8$fp; z;3q>k`4%ns5S#BrSdD+;@7-k8Q?JMpW=zOCBj|r>nJV&Vj5aRtXH1O-W%Yv)=`u^t zI<|GyDCXeJ2hDof5H(W7Z%?qMK=j}TC`;*5VY#^`)!u1DIz)dXfqJ>e%>gks(Q6SL zJ-^D=iMJ2vL8MOR*`LPUdu2vVO6{5vD?$y)&7gse>wL7Td5Z*X{8tIbl%$Uyjec4C z&1%Bx%n~hM>2ArN`a=a�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 z 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 z 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 WVV50x-Y!=%m~oSQkxai8nEnH`MgPSB