import React from 'react'; import ReactDOM from 'react-dom'; import '../src/genfun_formatter'; import { Receipt } from './render'; import * as m from './Model'; import * as gf from '../src/genfuns'; const Editable = gf.defgeneric("Editable", "props") .around([Object], function (_) { return
{this.call_next_method()}
}) .primary([gf.Shape("label", "htmlFor")], ({ label, htmlFor }) => ) .primary([gf.Shape("label", "htmlFor", "value")], function ({ value, onChange }) { return <> {this.call_next_method()} {onChange ? null : {value}} }) .primary([gf.Shape("label", "htmlFor", "value", "onChange")], function ({ value, htmlFor, onChange }) { return <> {this.call_next_method()} }) .fn; class Field extends React.Component { constructor(props) { super(); this.state = { editing: false, val: props.value }; } click() { this.setState(() => ({ editing: !this.state.editing, val: this.state.val })); } onChange(e) { const val = e.target.value; this.setState(() => ({ editing: true, val })) } render() { const editingProps = {}; if (this.state.editing) { editingProps.onChange = this.onChange.bind(this); } return
} } ReactDOM.render(
, document.querySelector('main'), () => { console.log('rendered'); } );