public LeaderBoardDetailScreen( LeaderBoardDetailScreenViewModel viewModel = null, LeaderBoardDetailScreenActionModel actionModel = null, Key key = null ) : base(key: key) { this.viewModel = viewModel; this.actionModel = actionModel; }
public override Widget build(BuildContext context) { return(new StoreConnector <AppState, LeaderBoardDetailScreenViewModel>( converter: state => { var currentUserId = state.loginState.loginInfo.userId ?? ""; var dict = this.type == LeaderBoardType.collection ? state.leaderBoardState.collectionDict : state.leaderBoardState.columnDict; var articleList = dict.ContainsKey(this.tagId) ? dict[this.tagId] : new List <string>(); var collectedMap = state.loginState.isLoggedIn ? state.favoriteState.collectedTagMap.ContainsKey(state.loginState.loginInfo.userId) ? state.favoriteState.collectedTagMap[state.loginState.loginInfo.userId] : new Dictionary <string, bool>() : new Dictionary <string, bool>(); var followedMap = state.loginState.isLoggedIn ? state.followState.followDict.ContainsKey(state.loginState.loginInfo.userId) ? state.followState.followDict[state.loginState.loginInfo.userId] : new Dictionary <string, bool>() : new Dictionary <string, bool>(); var rankData = state.leaderBoardState.rankDict.isNotEmpty() && state.leaderBoardState.rankDict.ContainsKey(this.tagId) ? state.leaderBoardState.rankDict[this.tagId] : null; var isCollected = false; var isFollowed = false; var isHost = false; if (rankData != null) { isCollected = state.loginState.isLoggedIn && collectedMap.ContainsKey(rankData.itemId) && collectedMap[rankData.itemId]; isFollowed = state.loginState.isLoggedIn && followedMap.ContainsKey(rankData.itemId) && followedMap[rankData.itemId]; isHost = state.loginState.isLoggedIn && state.favoriteState.favoriteTagDict.isNotEmpty() && state.favoriteState.favoriteTagDict.ContainsKey(rankData.itemId) && state.favoriteState.favoriteTagDict[rankData.itemId].userId == state.loginState.loginInfo.userId; } return new LeaderBoardDetailScreenViewModel { rankData = rankData, type = this.type, tagId = this.tagId, articleList = articleList, articleDict = state.articleState.articleDict, userDict = state.userState.userDict, teamDict = state.teamState.teamDict, userArticleDict = state.articleState.userArticleDict, isCollected = isCollected, isFollowed = isFollowed, isHost = isHost, currentUserId = currentUserId, isLoggedIn = state.loginState.isLoggedIn, hasMore = state.leaderBoardState.detailHasMore, loading = state.leaderBoardState.detailLoading, collectLoading = state.leaderBoardState.detailCollectLoading, favoriteTagDict = state.favoriteState.favoriteTagDict, favoriteTagArticleDict = state.favoriteState.favoriteTagArticleDict }; }, builder: (context1, viewModel, dispatcher) => { var actionModel = new LeaderBoardDetailScreenActionModel { mainRouterPop = () => dispatcher.dispatch(new MainNavigatorPopAction()), pushToLogin = () => dispatcher.dispatch(new MainNavigatorPushToAction { routeName = MainNavigatorRoutes.Login }), pushToArticleDetail = id => dispatcher.dispatch( new MainNavigatorPushToArticleDetailAction { articleId = id } ), startFetchDetailList = () => dispatcher.dispatch(new StartFetchLeaderBoardDetailAction()), fetchDetailList = page => dispatcher.dispatch <IPromise>( Actions.fetchLeaderBoardDetail(this.tagId, page, this.type)), pushToReport = (reportId, reportType) => dispatcher.dispatch( new MainNavigatorPushToReportAction { reportId = reportId, reportType = reportType } ), pushToBlock = articleId => { dispatcher.dispatch(new BlockArticleAction { articleId = articleId }); dispatcher.dispatch(new DeleteArticleHistoryAction { articleId = articleId }); }, collectFavoriteTag = (itemId, rankDataId) => dispatcher.dispatch <IPromise>(Actions.collectFavoriteTag(itemId, rankDataId)), cancelCollectFavoriteTag = (myFavoriteId, itemId) => dispatcher.dispatch <IPromise>(Actions.cancelCollectFavoriteTag(myFavoriteId, itemId)), startFollowUser = followUserId => dispatcher.dispatch(new StartFollowUserAction { followUserId = followUserId }), startUnFollowUser = userId => dispatcher.dispatch(new StartUnFollowUserAction { unFollowUserId = userId }), followUser = userId => dispatcher.dispatch <IPromise>(Actions.fetchFollowUser(userId)), unFollowUser = userId => dispatcher.dispatch <IPromise>(Actions.fetchUnFollowUser(userId)) }; return new LeaderBoardDetailScreen(viewModel: viewModel, actionModel: actionModel); } )); }