import { useContext, useEffect, useRef } from "react"; import { Editor, type EditorState } from "./Editor"; import { EnvContext } from "./EnvContext"; import type { Dynamic, State2Props } from "./util/extra"; import { growEnv } from "dope2"; import { autoInputWidth } from "./util/dom_trickery"; export interface LetInBlockState { kind: "let"; name: string; value: EditorState; inner: EditorState; resolved: undefined | Dynamic; } interface LetInBlockProps extends State2Props { onResolve: (resolved: EditorState) => void; } export function LetInBlock({state, setState, onResolve}: LetInBlockProps) { const {name, value, inner} = state; const env = useContext(EnvContext); const nameRef = useRef(null); const onChangeName = (e: React.ChangeEvent) => { setState({...state, name: e.target.value}); } useEffect(() => { nameRef.current?.focus(); }, []); useEffect(() => autoInputWidth(nameRef, name), [nameRef, name]); const innerEnv = (name !== '') && value.resolved && growEnv(env)(name)(value.resolved) || env; return
let = true} onResolve={(state: EditorState) => {} } onCancel={() => {} } setState={(state: EditorState) => {} } />  in
setState({...state, inner})} filter={() => true} onResolve={onResolve} onCancel={() => {}} />
}