Skip to content

Commit eb9cebb

Browse files
committed
Tests via @playwright/experimental-ct-test
Signed-off-by: Andrew Stein <[email protected]>
1 parent 2f910bd commit eb9cebb

File tree

24 files changed

+1057
-549
lines changed

24 files changed

+1057
-549
lines changed

.prettierrc.json

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"tabWidth": 4,
3-
"experimentalTernaries": true,
43
"overrides": [
54
{
65
"files": ["*.html"],

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@
4848
"@finos/perspective-viewer-openlayers": "workspace:^",
4949
"@finos/perspective-workspace": "workspace:^",
5050
"@fontsource/roboto-mono": "4.5.10",
51-
"@playwright/test": "^1.49.1",
51+
"@playwright/test": "^1.52.0",
52+
"@playwright/experimental-ct-react": "1.52.0",
5253
"@types/ws": "^8.18.1",
5354
"@zip.js/zip.js": "^2.7.54",
5455
"auto-changelog": "^2.5.0",

packages/perspective-react/package.json

+3-4
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@
1818
"clean": "rimraf dist"
1919
},
2020
"peerDependencies": {
21-
"@types/react": "^18.0.0",
22-
"react": "^18.0.0",
23-
"react-dom": "^18.0.0"
21+
"@types/react": "^18",
22+
"react": "^18",
23+
"react-dom": "^18"
2424
},
2525
"devDependencies": {
26-
"@finos/perspective-esbuild-plugin": "workspace:^",
2726
"zx": "^8.3.0"
2827
}
2928
}

packages/perspective-react/src/index.tsx

+3-4
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,10 @@ function usePspListener<A>(
2121
) {
2222
React.useEffect(() => {
2323
if (f) {
24-
const controller = new AbortController();
25-
const opts = { signal: controller.signal };
24+
const ctx = new AbortController();
2625
const callback = (e: Event) => f((e as CustomEvent).detail);
27-
viewer?.addEventListener(name, callback, opts);
28-
return () => controller.abort();
26+
viewer?.addEventListener(name, callback, { signal: ctx.signal });
27+
return () => ctx.abort();
2928
}
3029
}, [viewer, f]);
3130
}

packages/perspective-react/test/index.tsx

-191
This file was deleted.

tools/perspective-test/react-test/index.tsx renamed to packages/perspective-react/test/js/basic.story.tsx

+68-44
Original file line numberDiff line numberDiff line change
@@ -10,69 +10,93 @@
1010
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
1111
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
1212

13-
import * as React from "react";
14-
import { createRoot } from "react-dom/client";
15-
16-
import * as psp from "@finos/perspective-react";
17-
import {
18-
PerspectiveProvider,
19-
PerspectiveViewer,
20-
} from "@finos/perspective-react";
21-
import perspective, { Table } from "@finos/perspective";
13+
import perspective from "@finos/perspective";
2214
import perspective_viewer from "@finos/perspective-viewer";
23-
24-
// Import perspective viewer plugins to register them on the web component.
2515
import "@finos/perspective-viewer-datagrid";
2616
import "@finos/perspective-viewer-d3fc";
2717

28-
// Refer to bootstrapping link above
29-
import SERVER_WASM from "@finos/perspective/dist/wasm/perspective-server.wasm";
30-
import CLIENT_WASM from "@finos/perspective-viewer/dist/wasm/perspective-viewer.wasm";
18+
// @ts-ignore
19+
import SERVER_WASM from "@finos/perspective/dist/wasm/perspective-server.wasm?url";
20+
21+
// @ts-ignore
22+
import CLIENT_WASM from "@finos/perspective-viewer/dist/wasm/perspective-viewer.wasm?url";
3123

3224
await Promise.all([
3325
perspective.init_server(fetch(SERVER_WASM)),
3426
perspective_viewer.init_client(fetch(CLIENT_WASM)),
3527
]);
3628

37-
// Now WASM has booted and we can construct a web worker to host our tables.
38-
const worker = await perspective.worker();
29+
import type * as psp from "@finos/perspective";
30+
import type * as pspViewer from "@finos/perspective-viewer";
3931

40-
const Root: React.FC = () => {
41-
return (
42-
<PerspectiveProvider>
43-
<App />
44-
</PerspectiveProvider>
45-
);
32+
// @ts-ignore
33+
import SUPERSTORE_ARROW from "superstore-arrow/superstore.lz4.arrow?url";
34+
35+
const WORKER = await perspective.worker();
36+
37+
async function createNewSuperstoreTable(): Promise<psp.Table> {
38+
const req = fetch(SUPERSTORE_ARROW);
39+
const resp = await req;
40+
const buffer = await resp.arrayBuffer();
41+
return await WORKER.table(buffer);
42+
}
43+
44+
const CONFIG: pspViewer.ViewerConfigUpdate = {
45+
group_by: ["State"],
4646
};
4747

48-
const App: React.FC = () => {
49-
const actions = psp.useActions();
50-
const [selectedTable, setSelectedTable] =
51-
React.useState<string>("my_table");
52-
// DON'T MOVE THIS WITHOUT UPDATING {docs/md/how_to/javascript/react.md}
53-
// This is just for testing and shouldn't be visible in our docs.
48+
import * as React from "react";
49+
import { PerspectiveViewer } from "@finos/perspective-react";
5450

55-
React.useEffect(() => {
56-
(window as any).__PSP_REACT_TEST_HARNESS__ = {
57-
worker,
58-
actions,
59-
setSelectedTable,
60-
};
61-
}, []);
51+
import "@finos/perspective-viewer/dist/css/themes.css";
52+
import "./index.css";
53+
54+
interface ToolbarState {
55+
mounted: boolean;
56+
table?: Promise<psp.Table>;
57+
config: pspViewer.ViewerConfigUpdate;
58+
}
6259

63-
// DON'T MOVE THIS WITHOUT UPDATING {docs/md/how_to/javascript/react.md}
60+
export const App: React.FC = () => {
61+
const [state, setState] = React.useState<ToolbarState>(() => ({
62+
mounted: true,
63+
table: createNewSuperstoreTable(),
64+
config: { ...CONFIG },
65+
}));
6466

6567
React.useEffect(() => {
66-
actions.addTable({
67-
table: "my_table",
68-
promise: worker.table({ x: [1, 2, 3] }),
69-
});
7068
return () => {
71-
actions.removeTable({ table: "my_table" });
69+
state.table?.then((table) => table?.delete({ lazy: true }));
7270
};
7371
}, []);
7472

75-
return <PerspectiveViewer selectedTable={selectedTable} />;
76-
};
73+
const onConfigUpdate = (config: pspViewer.ViewerConfigUpdate) => {
74+
console.log("Config Update Event", config);
75+
setState({ ...state, config });
76+
};
77+
78+
const onClick = (detail: pspViewer.PerspectiveClickEventDetail) => {
79+
console.log("Click Event,", detail);
80+
};
7781

78-
createRoot(document.getElementById("root")!).render(<Root />);
82+
const onSelect = (detail: pspViewer.PerspectiveSelectEventDetail) => {
83+
console.log("Select Event", detail);
84+
};
85+
86+
return (
87+
<div className="container">
88+
{state.mounted && (
89+
<>
90+
<PerspectiveViewer table={state.table} />
91+
<PerspectiveViewer
92+
table={state.table}
93+
config={state.config}
94+
onClick={onClick}
95+
onSelect={onSelect}
96+
onConfigUpdate={onConfigUpdate}
97+
/>
98+
</>
99+
)}
100+
</div>
101+
);
102+
};

0 commit comments

Comments
 (0)