/// /// module rpgcards { const deckColor = "#F44336"; function deckTile(deck: Deck, cards: string[]) { return > DeckTile({ key : deck.id, id : deck.id, name : deck.name, desc : deck.description, cards : cards.length, icon : null, color : deckColor }); } function loadingTile(id: string) { return > DeckTile({ key : id, id : id, name : "Loading...", desc : "", cards : null, icon : null, color : deckColor }); } function errorTile(id: string, e: Error) { return > DeckTile({ key : id, id : id, name : "Error", desc : e.message, cards : null, icon : null, color : deckColor }); } function newDeckTile() { return > DeckTile({ key : "#new", id : null, name : "New deck", desc : null, cards : null, icon : "add circle", color : deckColor }); } export function renderDecks(store: Store): React.ReactElement { var decks = store.getDeckList().fmap(deckIds => deckIds.map(id => { let deck = store.getDeck(id); return deck.lift(deck => { return > DeckTile({ key : deck.id, id : deck.id, desc: deck.description, name: deck.name}); }).caseOf({ just: (t) => t, nothing: (e) => errorTile(id, e), pending: () => loadingTile(id) }); })).caseOf({ just: (t) => t, nothing: (e) => [React.DOM.div({}, "error: " + e.message)], pending: () => [React.DOM.div({}, "loading...")] }); return React.DOM.div({} , renderHeader(store) , React.DOM.div({ className: 'decks' } , decks , newDeckTile() )); } }