Files
workavia-mail-front/lib/features/email/presentation/controller/email_parent_controller.dart
T
2022-11-01 21:56:52 +07:00

71 lines
2.7 KiB
Dart

import 'dart:collection';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
import 'package:tmail_ui_user/features/email/presentation/model/email_loaded.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
class EmailParentController extends BaseController with AppLoaderMixin {
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
final Queue<EmailLoaded> presentationEmailsLoaded = Queue();
PageController? pageController;
int currentIndexPageView = -1;
final canGetNewerEmail = true.obs;
final canGetOlderEmail = true.obs;
Rxn<PresentationEmail> get selectedEmail => mailboxDashBoardController.selectedEmail;
Session? get sessionCurrent => mailboxDashBoardController.sessionCurrent;
AccountId? get accountId => mailboxDashBoardController.accountId.value;
RxList<PresentationEmail> get listEmail => mailboxDashBoardController.searchController.isSearchEmailRunning && !kIsWeb ?
mailboxDashBoardController.listResultSearch : mailboxDashBoardController.emailsInCurrentMailbox;
@override
void onClose() {
pageController?.dispose();
super.onClose();
}
void setCurrentPositionEmailInListEmail(EmailId? currentEmailId) {
currentIndexPageView = listEmail.indexWhere((e) => e.id == currentEmailId);
if(pageController != null && pageController!.hasClients && pageController!.page?.toInt() != currentIndexPageView) {
pageController!.jumpToPage(currentIndexPageView);
} else {
pageController = PageController(initialPage: currentIndexPageView);
}
_checkEnableNavigatorPageView();
}
void onPageChanged(int index) {
mailboxDashBoardController.selectedEmail.value = listEmail[index];
}
void _checkEnableNavigatorPageView() {
canGetNewerEmail.value = currentIndexPageView > 0;
canGetOlderEmail.value = listEmail.length > 1 && currentIndexPageView < listEmail.length - 1;
}
void getNewerEmail() {
currentIndexPageView = currentIndexPageView - 1;
pageController?.jumpToPage(currentIndexPageView);
}
void getOlderEmail() {
currentIndexPageView = currentIndexPageView + 1;
pageController?.jumpToPage(currentIndexPageView);
}
@override
void onDone() {
}
}