import * as React from "react"; import { SqLambda, environment, SqValueTag } from "@quri/squiggle-lang"; import { FunctionChart1Dist } from "./FunctionChart1Dist"; import { FunctionChart1Number } from "./FunctionChart1Number"; import { DistributionPlottingSettings } from "./DistributionChart"; import { ErrorAlert, MessageAlert } from "./Alert"; export type FunctionChartSettings = { start: number; stop: number; count: number; }; interface FunctionChartProps { fn: SqLambda; chartSettings: FunctionChartSettings; distributionPlotSettings: DistributionPlottingSettings; environment: environment; height: number; } export const FunctionChart: React.FC = ({ fn, chartSettings, environment, distributionPlotSettings, height, }) => { if (fn.parameters.length > 1) { return ( Only functions with one parameter are displayed. ); } const result1 = fn.call([chartSettings.start]); const result2 = fn.call([chartSettings.stop]); const getValidResult = () => { if (result1.tag === "Ok") { return result1; } else if (result2.tag === "Ok") { return result2; } else { return result1; } }; const validResult = getValidResult(); if (validResult.tag === "Error") { return ( {validResult.value.toString()} ); } switch (validResult.value.tag) { case SqValueTag.Distribution: return ( ); case SqValueTag.Number: return ( ); default: return ( There is no function visualization for this type of output:{" "} {validResult.value.tag} ); } };