+
void;
};
@@ -27,15 +29,25 @@ const importSourceName = (sourceName: string) => "imports-" + sourceName;
const defaultContinues = [];
export const useSquiggle = (args: SquiggleArgs): ResultAndBindings => {
+ const project = useMemo(() => {
+ if (args.project) {
+ return args.project;
+ } else {
+ const p = SqProject.create();
+ if (args.environment) {
+ p.setEnvironment(args.environment);
+ }
+ return p;
+ }
+ }, [args.project, args.environment]);
+
const sourceName = useMemo(() => uuid.v4(), []);
- const env = args.project.getEnvironment();
+ const env = project.getEnvironment();
const continues = args.continues || defaultContinues;
const result = useMemo(
() => {
- const project = args.project;
-
project.setSource(sourceName, args.code);
let fullContinues = continues;
if (args.jsImports && Object.keys(args.jsImports).length) {
@@ -59,7 +71,7 @@ export const useSquiggle = (args: SquiggleArgs): ResultAndBindings => {
args.executionId,
sourceName,
continues,
- args.project,
+ project,
env,
]
);
@@ -75,11 +87,11 @@ export const useSquiggle = (args: SquiggleArgs): ResultAndBindings => {
useEffect(() => {
return () => {
- args.project.removeSource(sourceName);
- if (args.project.getSource(importSourceName(sourceName)))
- args.project.removeSource(importSourceName(sourceName));
+ project.removeSource(sourceName);
+ if (project.getSource(importSourceName(sourceName)))
+ project.removeSource(importSourceName(sourceName));
};
- }, [args.project, sourceName]);
+ }, [project, sourceName]);
return result;
};
diff --git a/packages/components/test/basic.test.tsx b/packages/components/test/basic.test.tsx
index e77f104b..37585461 100644
--- a/packages/components/test/basic.test.tsx
+++ b/packages/components/test/basic.test.tsx
@@ -1,9 +1,14 @@
-import { render } from "@testing-library/react";
+import { render, screen } from "@testing-library/react";
import React from "react";
import "@testing-library/jest-dom";
-import { SquiggleChart } from "../src/index";
+import {
+ SquiggleChart,
+ SquiggleEditor,
+ SquigglePlayground,
+} from "../src/index";
+import { SqProject } from "@quri/squiggle-lang";
-test("Logs nothing on render", async () => {
+test("Chart logs nothing on render", async () => {
const { unmount } = render();
unmount();
@@ -11,3 +16,38 @@ test("Logs nothing on render", async () => {
expect(console.warn).not.toBeCalled();
expect(console.error).not.toBeCalled();
});
+
+test("Editor logs nothing on render", async () => {
+ const { unmount } = render();
+ unmount();
+
+ expect(console.log).not.toBeCalled();
+ expect(console.warn).not.toBeCalled();
+ expect(console.error).not.toBeCalled();
+});
+
+test("Project dependencies work in editors", async () => {
+ const project = SqProject.create();
+
+ render();
+ const source = project.getSourceIds()[0];
+ const { container } = render(
+
+ );
+ expect(container).toHaveTextContent("2");
+});
+
+test("Project dependencies work in playgrounds", async () => {
+ const project = SqProject.create();
+ project.setSource("depend", "x = 1");
+
+ render(
+
+ );
+ // We must await here because SquigglePlayground loads results asynchronously
+ expect(await screen.findByRole("status")).toHaveTextContent("2");
+});