import * as React from "react" import * as ReactDOM from "react-dom" import * as Immutable from "immutable" import {C, unit, bind, Mode, make_C, CmdCommon} from '../react_monad/core' import {string, number, bool} from '../react_monad/primitives' import {button, selector, multi_selector, label, image} from '../react_monad/html' import {custom, repeat, any, lift_promise, retract, delay, simple_menu, hide} from '../react_monad/combinators' import {paginate, Page} from '../react_monad/paginator' type ListProps = { kind:"list", items:Immutable.List className:string, renderer:((index:number) => (_:A) => C) } & CmdCommon type ListState = { ps:"creating"|Immutable.List } class List extends React.Component,ListState> { constructor(props:ListProps,context:any) { super(props, context) this.state = { ps:"creating" } } componentWillReceiveProps(new_props:ListProps) { this.setState({...this.state, ps:new_props.items.map((item, index) => new_props.renderer(index)(item).comp(new_props.context)(callback => new_value => new_props.cont(callback)(new_value))).toList()}) } componentWillMount() { this.setState({...this.state, ps:this.props.items.map((item, index) => this.props.renderer(index)(item).comp(this.props.context)(callback => new_value => this.props.cont(callback)(new_value))).toList()}) } render() { return
{ this.state.ps != "creating" ? this.state.ps : [] }
} } export let list = function(items:Immutable.List
, key?:string, className?:string, dbg?:() => string) : ((renderer:(index:number) => (_:A)=> C) => C) { return renderer => make_C(context => cont => React.createElement>(List, { kind:"list", items:items, renderer:renderer, cont:cont, context:context, key:key, className:className, debug_info:dbg })) }