TF-3479 Handle switch state display mode of multiple composer (Fullscreen <-> Normal <-> Minimize)

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-02-14 02:03:22 +07:00
committed by Dat H. Pham
parent c603b5e40b
commit e6ad72e42d
8 changed files with 283 additions and 211 deletions
@@ -0,0 +1,82 @@
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
import 'package:tmail_ui_user/features/composer/presentation/utils/composer_utils.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
extension UpdateScreenDisplayModeExtension on ComposerController {
bool get isNormalScreen =>
screenDisplayMode.value == ScreenDisplayMode.normal;
bool get isMinimizeScreen =>
screenDisplayMode.value == ScreenDisplayMode.minimize;
bool get isHiddenScreen =>
screenDisplayMode.value == ScreenDisplayMode.hidden;
bool get isFullScreen =>
screenDisplayMode.value == ScreenDisplayMode.fullScreen;
double get composerWidth {
switch (screenDisplayMode.value) {
case ScreenDisplayMode.normal:
return ComposerUtils.normalWidth;
case ScreenDisplayMode.minimize:
return ComposerUtils.minimizeWidth;
case ScreenDisplayMode.hidden:
case ScreenDisplayMode.fullScreen:
return 0;
}
}
void setScreenDisplayMode(ScreenDisplayMode displayMode) =>
screenDisplayMode.value = displayMode;
bool setToMinimizeIfNormal() {
if (isNormalScreen) {
screenDisplayMode.value = ScreenDisplayMode.minimize;
return true;
}
return false;
}
void updateDisplayModeForComposerQueue(ScreenDisplayMode displayMode) {
if (composerId == null || currentContext == null) return;
final composerManager = mailboxDashBoardController.composerManager;
final screenWidth = responsiveUtils.getSizeScreenWidth(currentContext!);
if (!composerManager.isExceedsScreenSize(
screenWidth: screenWidth,
composerIdsQueue: composerManager.composerIdsQueue,
)) {
return;
}
if (displayMode == ScreenDisplayMode.normal) {
final recordComposerIds = composerManager.findSurroundingComposerIds(composerId!);
final nextComposer = recordComposerIds.nextTargetId;
final prevComposer = recordComposerIds.previousTargetId;
if (nextComposer != null && composerManager.getComposerView(nextComposer).controller.setToMinimizeIfNormal()) {
return;
}
if (prevComposer != null && composerManager.getComposerView(prevComposer).controller.setToMinimizeIfNormal()) {
return;
}
final firstNormalComposerId = composerManager.findFirstNormalComposerIdInQueue();
if (firstNormalComposerId != null && firstNormalComposerId != composerId) {
composerManager
.getComposerView(firstNormalComposerId)
.controller
.setScreenDisplayMode(ScreenDisplayMode.minimize);
}
} else if (displayMode == ScreenDisplayMode.fullScreen) {
}
composerManager.syncComposerQueue(screenWidth: screenWidth);
}
}