feat: Get working prototype

Only required figuring out the bindings!
This commit is contained in:
NunoSempere 2022-07-19 17:53:33 -04:00
parent 6f91849e4e
commit 4fddea47bf
3 changed files with 15 additions and 186 deletions

View File

@ -30,23 +30,26 @@ export function DynamicSquiggleChart({ element, stopShowing }) {
let usefulElement = { let usefulElement = {
name: element.id, name: element.id,
squiggleString: element.fn, squiggleString: element.fn,
formula: element.formula binding: element.binding || null
}; };
console.log(element.binding)
// alert(usefulElement.squiggleString)
return ( return (
<div className=""> <div className="">
<h3 className="text-2xl font-bold mb-5">{usefulElement.name}</h3> <h3 className="text-2xl font-bold mb-5">{usefulElement.name}</h3>
<textarea <textarea
value={JSON.stringify(usefulElement, null, 4)} value={usefulElement.squiggleString}
//onChange={handleChange} //onChange={handleChange}
disabled={true} disabled={true}
rows={JSON.stringify(usefulElement, null, 4).split("\n").length} rows={5} // could compute from usefulElement.squiggleString
cols={37} cols={30}
className="text-left text-gray-600 bg-white rounded text-normal p-6 border-0 shadow outline-none focus:outline-none focus:ring mb-4" className="text-left text-gray-600 bg-white rounded text-normal p-8 m-8 border-0 shadow outline-none focus:outline-none focus:ring"
/> />
<SquiggleChart <SquiggleChart
squiggleString={element.squiggleString} squiggleString={usefulElement.squiggleString}
width={500} width={500}
height={200} height={200}
bindings={usefulElement.binding}
showSummary={true} showSummary={true}
showTypes={true} showTypes={true}
/> />

View File

@ -1,75 +0,0 @@
import React from "react";
// import { SquiggleChart } from "@quri/squiggle-components";
import dynamic from "next/dynamic";
const SquiggleChart = dynamic(
() => import("@quri/squiggle-components").then((mod) => mod.SquiggleChart),
{
loading: () => <p>Loading...</p>,
ssr: false,
}
);
/*
const SquiggleChart = dynamic(
() => import("@quri/squiggle-components").then((mod) => mod.SquiggleChart),
{
suspense: true,
ssr: false,
}
);
*/
const effectButtonStyle =
"bg-transparent m-2 hover:bg-blue-500 text-blue-700 font-semibold hover:text-white py-2 px-4 border border-blue-500 hover:border-transparent rounded mt-5";
export function DynamicSquiggleChart({ element, stopShowing }) {
if (element == null) {
return "";
} else {
let usefulElement = {
name: element.id,
squiggleString: element.fn,
formula: element.formula
};
return (
<div className="">
<h3 className="text-2xl font-bold mb-5">{usefulElement.name}</h3>
<textarea
value={JSON.stringify(usefulElement, null, 4)}
//onChange={handleChange}
disabled={true}
rows={JSON.stringify(usefulElement, null, 4).split("\n").length}
cols={37}
className="text-left text-gray-600 bg-white rounded text-normal p-6 border-0 shadow outline-none focus:outline-none focus:ring mb-4"
/>
<SquiggleChart
squiggleString={element.squiggleString}
width={500}
height={200}
showSummary={true}
showTypes={true}
/>
{/*
SquiggleChart props:
squiggleString?: string;
sampleCount?: number;
environment?: environment;
chartSettings?: FunctionChartSettings;
onChange?(expr: squiggleExpression): void;
width?: number;
height?: number;
bindings?: bindings;
jsImports?: jsImports;
showSummary?: boolean;
showTypes?: boolean;
showControls?: boolean;
*/}
<button className={effectButtonStyle} onClick={() => stopShowing()}>
Hide chart
</button>
</div>
);
}
}

View File

@ -101,7 +101,8 @@ ${parentName}`;
tag: 'Ok', tag: 'Ok',
id: parentName, id: parentName,
value: parentValue.value, value: parentValue.value,
fn: fn fn: fn,
binding: parentBinding
}) })
nodes.push(resultNode) nodes.push(resultNode)
@ -125,15 +126,12 @@ export function createGraph() {
hours: `4 to 12`, hours: `4 to 12`,
efficiency: `0.1 to 10`, efficiency: `0.1 to 10`,
}, },
fn: ` fn: `hours * efficiency`,
hours * efficiency
`,
}, },
}, },
fn: ` fn: `x = 1 to 10
x = 1 to 10 r = productivity * (1 to 10) * x
r = productivity * (1 to 10) * x mean(r)`,
mean(r)`,
}; };
let reducerResult = miniReducer(utility, "utility"); let reducerResult = miniReducer(utility, "utility");
@ -158,100 +156,3 @@ export function createGraph() {
// Then the rest should be doable without all that much work. // Then the rest should be doable without all that much work.
// Some duplication of efforts, but I don't really care: // Some duplication of efforts, but I don't really care:
} }
export function createGraph0() {
let nodeElements = [
{
data: {
id: "Total utility",
squiggleString: "1 to 1000",
formula: "now + soon + later"
}
},
{
data: {
id: "now",
squiggleString: "1 to 2",
formula: "subjective estimation"
},
},
{
data: {
id: "soon",
squiggleString: "10 to 200",
formula: "subjective estimation"
},
},
{
data: {
id: "later",
squiggleString: "1 to 500",
formula: "subjective estimation"
},
},
{
data: {
id: "discount rate",
squiggleString: "0.001 to 0.03",
formula: "subjective estimation"
},
},
{
data: {
id: "return rate",
squiggleString: "1 to 2"
}
},
]
let edgeElements = [
{
data: {
id: "link-1",
source: "now",
target: "Total utility",
},
},
{
data: {
id: "link-2",
source: "soon",
target: "Total utility",
},
},
{
data: {
id: "link-3",
source: "later",
target: "Total utility",
},
},
{
data: {
id: "link-4",
source: "discount rate",
target: "later",
},
},
{
data: {
id: "link-5",
source: "return rate",
target: "later",
}
},
]
//
let squiggleInJs = ({
displayName: "Total utility",
varName: "utility",
inputs: {
},
fn: ``
})
//
return { nodeElements, edgeElements }
}