Ejemplo n.º 1
0
 public FavoriteDetailScreen(
     FavoriteDetailScreenViewModel viewModel,
     FavoriteDetailScreenActionModel actionModel,
     Key key = null
     ) : base(key: key)
 {
     this.viewModel   = viewModel;
     this.actionModel = actionModel;
 }
Ejemplo n.º 2
0
        public override Widget build(BuildContext context)
        {
            return(new StoreConnector <AppState, FavoriteDetailScreenViewModel>(
                       converter: state => {
                var favoriteTagDict = state.favoriteState.favoriteTagDict;
                var favoriteTag = favoriteTagDict.ContainsKey(key: this.tagId)
                        ? favoriteTagDict[key: this.tagId]
                        : null;
                var favoriteDetailArticleIdDict = state.favoriteState.favoriteDetailArticleIdDict;
                var favoriteDetailArticleIds = favoriteDetailArticleIdDict.ContainsKey(key: this.tagId)
                        ? favoriteDetailArticleIdDict[key: this.tagId]
                        : null;
                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 isCollected = false;
                if (favoriteTag != null)
                {
                    isCollected = state.loginState.isLoggedIn &&
                                  collectedMap.ContainsKey(favoriteTag.quoteTagId.isEmpty()
                                          ? favoriteTag.id
                                          : favoriteTag.quoteTagId);
                }

                var currentUserId = state.loginState.loginInfo.userId ?? "";
                var myFavoriteIds = state.favoriteState.favoriteTagIdDict.ContainsKey(key: currentUserId)
                        ? state.favoriteState.favoriteTagIdDict[key: currentUserId]
                        : new List <string>();
                return new FavoriteDetailScreenViewModel {
                    userId = this.userId,
                    tagId = this.tagId,
                    type = this.type,
                    favoriteDetailLoading = state.favoriteState.favoriteDetailLoading,
                    favoriteDetailArticleIds = favoriteDetailArticleIds,
                    favoriteArticleOffset = favoriteDetailArticleIds?.Count ?? 0,
                    favoriteArticleHasMore = state.favoriteState.favoriteDetailHasMore,
                    isLoggedIn = state.loginState.isLoggedIn,
                    favoriteTag = favoriteTag,
                    articleDict = state.articleState.articleDict,
                    userDict = state.userState.userDict,
                    teamDict = state.teamState.teamDict,
                    currentUserId = state.loginState.loginInfo.userId ?? "",
                    isCollect = isCollected,
                    collectLoading = state.leaderBoardState.detailCollectLoading,
                    collectChangeMap = state.favoriteState.collectedTagChangeMap,
                    myFavoriteIds = myFavoriteIds
                };
            },
                       builder: (context1, viewModel, dispatcher) => {
                var actionModel = new FavoriteDetailScreenActionModel {
                    mainRouterPop = () => dispatcher.dispatch(new MainNavigatorPopAction()),
                    startFetchFavoriteDetail = () => dispatcher.dispatch(new StartFetchFavoriteDetailAction()),
                    fetchFavoriteDetail = (tagId, offset) =>
                                          dispatcher.dispatch <IPromise>(Actions.fetchFavoriteDetail(userId: this.userId, tagId: tagId,
                                                                                                     offset: offset)),
                    unFavoriteArticle = (articleId, favoriteId) =>
                                        dispatcher.dispatch <IPromise>(Actions.unFavoriteArticle(articleId: articleId,
                                                                                                 favoriteId: favoriteId)),
                    pushToLogin = () => dispatcher.dispatch(new MainNavigatorPushToAction {
                        routeName = MainNavigatorRoutes.Login
                    }),
                    pushToReport = reportId => dispatcher.dispatch(
                        new MainNavigatorPushToReportAction {
                        reportId = reportId,
                        reportType = ReportType.article
                    }
                        ),
                    pushToBlock = articleId => {
                        dispatcher.dispatch(new BlockArticleAction {
                            articleId = articleId
                        });
                        dispatcher.dispatch(new DeleteArticleHistoryAction {
                            articleId = articleId
                        });
                    },
                    pushToArticleDetail = articleId => dispatcher.dispatch(
                        new MainNavigatorPushToArticleDetailAction {
                        articleId = articleId
                    }
                        ),
                    pushToEditFavorite = tagId => dispatcher.dispatch(
                        new MainNavigatorPushToEditFavoriteAction {
                        tagId = tagId
                    }
                        ),
                    shareToWechat = (type, title, description, linkUrl, imageUrl) => dispatcher.dispatch <IPromise>(
                        Actions.shareToWechat(type: type, title: title, description: description, linkUrl: linkUrl,
                                              imageUrl: imageUrl)),
                    collectFavoriteTag =
                        (itemId, tagId) =>
                        dispatcher.dispatch <IPromise>(Actions.collectFavoriteTag(itemId, tagId: tagId)),
                    cancelCollectFavoriteTag = (tagId, itemId) =>
                                               dispatcher.dispatch <IPromise>(Actions.cancelCollectFavoriteTag(tagId, itemId))
                };
                return new FavoriteDetailScreen(viewModel: viewModel, actionModel: actionModel);
            }
                       ));
        }
Ejemplo n.º 3
0
 public override Widget build(BuildContext context)
 {
     return(new StoreConnector <AppState, FavoriteDetailScreenViewModel>(
                converter: state => {
         var favoriteTagDict = state.favoriteState.favoriteTagDict;
         var favoriteTag = favoriteTagDict.ContainsKey(key: this.tagId)
                 ? favoriteTagDict[key: this.tagId]
                 : null;
         var favoriteDetailArticleIdDict = state.favoriteState.favoriteDetailArticleIdDict;
         var favoriteDetailArticleIds = favoriteDetailArticleIdDict.ContainsKey(key: this.tagId)
                 ? favoriteDetailArticleIdDict[key: this.tagId]
                 : null;
         return new FavoriteDetailScreenViewModel {
             tagId = this.tagId,
             favoriteDetailLoading = state.favoriteState.favoriteDetailLoading,
             favoriteDetailArticleIds = favoriteDetailArticleIds,
             favoriteArticleOffset = favoriteDetailArticleIds == null ? 0 : favoriteDetailArticleIds.Count,
             favoriteArticleHasMore = state.favoriteState.favoriteDetailHasMore,
             isLoggedIn = state.loginState.isLoggedIn,
             favoriteTag = favoriteTag,
             articleDict = state.articleState.articleDict,
             userDict = state.userState.userDict,
             teamDict = state.teamState.teamDict
         };
     },
                builder: (context1, viewModel, dispatcher) => {
         var actionModel = new FavoriteDetailScreenActionModel {
             mainRouterPop = () => dispatcher.dispatch(new MainNavigatorPopAction()),
             startFetchFavoriteDetail = () => dispatcher.dispatch(new StartFetchFavoriteDetailAction()),
             fetchFavoriteDetail = (tagId, offset) =>
                                   dispatcher.dispatch <IPromise>(Actions.fetchFavoriteDetail(userId: this.userId, tagId: tagId,
                                                                                              offset: offset)),
             unFavoriteArticle = (articleId, favoriteId) =>
                                 dispatcher.dispatch <IPromise>(Actions.unFavoriteArticle(articleId: articleId,
                                                                                          favoriteId: favoriteId)),
             pushToLogin = () => dispatcher.dispatch(new MainNavigatorPushToAction {
                 routeName = MainNavigatorRoutes.Login
             }),
             pushToReport = reportId => dispatcher.dispatch(
                 new MainNavigatorPushToReportAction {
                 reportId = reportId,
                 reportType = ReportType.article
             }
                 ),
             pushToBlock = articleId => {
                 dispatcher.dispatch(new BlockArticleAction {
                     articleId = articleId
                 });
                 dispatcher.dispatch(new DeleteArticleHistoryAction {
                     articleId = articleId
                 });
             },
             pushToArticleDetail = articleId => dispatcher.dispatch(
                 new MainNavigatorPushToArticleDetailAction {
                 articleId = articleId
             }
                 ),
             pushToEditFavorite = tagId => dispatcher.dispatch(
                 new MainNavigatorPushToEditFavoriteAction {
                 tagId = tagId
             }
                 ),
             shareToWechat = (type, title, description, linkUrl, imageUrl) => dispatcher.dispatch <IPromise>(
                 Actions.shareToWechat(type: type, title: title, description: description, linkUrl: linkUrl,
                                       imageUrl: imageUrl))
         };
         return new FavoriteDetailScreen(viewModel: viewModel, actionModel: actionModel);
     }
                ));
 }