TF-340 Debouncing when open the mailbox to prevent too much pressure on Back-end request
This commit is contained in:
committed by
Dat H. Pham
parent
c0b654d5a9
commit
baedd9597a
@@ -4,6 +4,8 @@ abstract class Success with EquatableMixin {}
|
||||
|
||||
abstract class ViewState extends Success {}
|
||||
|
||||
abstract class ViewEvent extends Success {}
|
||||
|
||||
class UIState extends ViewState {
|
||||
static final idle = UIState();
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -8,6 +10,7 @@ import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmapState;
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:rxdart/transformers.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart';
|
||||
import 'package:tmail_ui_user/features/caching/caching_manager.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
|
||||
@@ -31,6 +34,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_in
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/open_mailbox_view_event.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/duplicate_name_validator.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/special_character_validator.dart';
|
||||
@@ -73,6 +77,8 @@ class MailboxController extends BaseMailboxController {
|
||||
final searchQuery = SearchQuery.initial().obs;
|
||||
final currentSelectMode = SelectMode.INACTIVE.obs;
|
||||
|
||||
final _openMailboxEventController = StreamController<OpenMailboxViewEvent>();
|
||||
|
||||
List<PresentationMailbox> allMailboxes = <PresentationMailbox>[];
|
||||
TextEditingController searchInputController = TextEditingController();
|
||||
FocusNode searchFocus = FocusNode();
|
||||
@@ -123,6 +129,10 @@ class MailboxController extends BaseMailboxController {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
_openMailboxEventController.stream.throttleTime(Duration(milliseconds: 800)).listen((event) {
|
||||
_handleOpenMailbox(event.buildContext, event.presentationMailbox);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -246,9 +256,9 @@ class MailboxController extends BaseMailboxController {
|
||||
}
|
||||
}
|
||||
|
||||
void openMailbox(
|
||||
BuildContext context,
|
||||
PresentationMailbox presentationMailboxSelected
|
||||
void _handleOpenMailbox(
|
||||
BuildContext context,
|
||||
PresentationMailbox presentationMailboxSelected
|
||||
) {
|
||||
FocusScope.of(context).unfocus();
|
||||
|
||||
@@ -260,6 +270,13 @@ class MailboxController extends BaseMailboxController {
|
||||
}
|
||||
}
|
||||
|
||||
void openMailbox(
|
||||
BuildContext context,
|
||||
PresentationMailbox presentationMailboxSelected
|
||||
) {
|
||||
_openMailboxEventController.add(OpenMailboxViewEvent(context, presentationMailboxSelected));
|
||||
}
|
||||
|
||||
void _deleteCredential() async {
|
||||
await _deleteCredentialInteractor.execute();
|
||||
}
|
||||
@@ -594,4 +611,10 @@ class MailboxController extends BaseMailboxController {
|
||||
_clearAllCache();
|
||||
pushAndPopAll(AppRoutes.LOGIN);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_openMailboxEventController.close();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
|
||||
class OpenMailboxViewEvent extends ViewEvent {
|
||||
final BuildContext buildContext;
|
||||
final PresentationMailbox presentationMailbox;
|
||||
|
||||
OpenMailboxViewEvent(this.buildContext, this.presentationMailbox);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [buildContext, presentationMailbox];
|
||||
}
|
||||
@@ -135,6 +135,8 @@ dependencies:
|
||||
|
||||
pointer_interceptor: 0.9.1
|
||||
|
||||
rxdart: 0.27.3
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
|
||||
Reference in New Issue
Block a user