squiggle/packages/components/src/lib/hooks/useSquiggle.ts
2022-08-30 01:51:44 +04:00

43 lines
869 B
TypeScript

import {
environment,
resultMap,
run,
SqValue,
SqValueTag,
} from "@quri/squiggle-lang";
import { useEffect, useMemo } from "react";
type SquiggleArgs = {
code: string;
executionId?: number;
// jsImports?: jsImports;
environment?: environment;
onChange?: (expr: SqValue | undefined) => void;
};
export const useSquiggle = (args: SquiggleArgs) => {
const result = useMemo(
() => {
const result = run(args.code, {
environment: args.environment,
});
return result;
},
// eslint-disable-next-line react-hooks/exhaustive-deps
[
args.code,
// args.environment,
// args.jsImports,
args.executionId,
]
);
const { onChange } = args;
useEffect(() => {
onChange?.(result.result.tag === "Ok" ? result.result.value : undefined);
}, [result, onChange]);
return result;
};