public VNode Render() { void startNewGame() { BC.Solitaire.Solitaire.Commands.OpenGame(GameID = GameID.Create(), AccountID); BC.Solitaire.Solitaire.Commands.JoinGame(GameID, AccountID); } void joinOldGame() { GameID = LastPlayedgame; BC.Solitaire.Solitaire.Commands.JoinGame(GameID, AccountID); } VNode highscore(IEnumerable <GameEntry> gameEntries, string title) { return(Div( Styles.TabNameTag & Styles.FitContent & Styles.Fontcopperplate & Styles.Underline & Styles.MY2, Text(title), Fragment(gameEntries.ToList().Select(e => Row( Styles.Fontcopperplate, Text($"{gameEntries.ToList().IndexOf(e) + 1}", Styles.MX2 & Styles.W3C), Text(e.FinalScore.ToString(), Styles.W3C & Styles.TextAlignR), Text(AccountProjection[e.Player].Username, Styles.MX2 & Styles.W4C & Styles.TextAlignR) ))))); } if (GameID == default) { VNode continueLastGame = null; if (LastPlayedgame != default) { continueLastGame = Text("Continue Last Game", Styles.TabButton & Styles.W12C, () => joinOldGame()); } return(Div( Row( continueLastGame, Text("Start New Game", Styles.TabButton, () => startNewGame()) ), //dropdown here Div( Styles.P4 & Styles.TabNameTagNoWidth & Styles.W8C, DropdownComponent <ScoreTimespan> .Render(GetScoreTimeSpan(), a => ScoreOfTimespan = a, ScoreOfTimespan.ToString(), s => Text(s.ToString())) ), Row( highscore(SolitaireProjection.GetPersonalHighscore(ScoreOfTimespan, AccountID), "Personal Highscore"), highscore(SolitaireProjection.GetGlobalHighscore(ScoreOfTimespan), "Global Highscore") ) )); } return(RenderGameboard()); }