From 1bad81dbf2149ac69e813b1123a9fa7eb14486d9 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 14 Feb 2025 02:28:14 +0700 Subject: [PATCH] TF-3479 Sync state display mode of multiple composer when change responsive browser Signed-off-by: dab246 --- .../presentation/composer_overlay_view.dart | 16 ++++++++++ .../update_screen_display_mode_extension.dart | 5 +--- .../manager/composer_manager.dart | 30 ++++++++++++++++--- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/lib/features/composer/presentation/composer_overlay_view.dart b/lib/features/composer/presentation/composer_overlay_view.dart index 8cb857268..e97d82d5e 100644 --- a/lib/features/composer/presentation/composer_overlay_view.dart +++ b/lib/features/composer/presentation/composer_overlay_view.dart @@ -1,5 +1,6 @@ import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/update_screen_display_mode_extension.dart'; @@ -16,12 +17,14 @@ class ComposerOverlayView extends StatefulWidget { class _ComposerOverlayViewState extends State { late final ComposerManager _composerManager; late final ImagePaths _imagePaths; + late final ResponsiveUtils _responsiveUtils; @override void initState() { super.initState(); _composerManager = Get.find(); _imagePaths = Get.find(); + _responsiveUtils = Get.find(); } @override @@ -31,6 +34,11 @@ class _ComposerOverlayViewState extends State { final composerIdsQueue = _composerManager.composerIdsQueue; if (composers.isEmpty || composerIdsQueue.isEmpty) return const SizedBox.shrink(); + if (!_responsiveUtils.isDesktop(context)) { + final firstResponsiveComposerView = _composerManager.firstComposerViewWhenResponsiveChanged; + if (firstResponsiveComposerView != null) return firstResponsiveComposerView; + } + final fullScreenComposerView = _composerManager.firstFullScreenComposerView; if (fullScreenComposerView != null) return fullScreenComposerView; @@ -38,6 +46,14 @@ class _ComposerOverlayViewState extends State { return _composerManager.getComposerView(composerIdsQueue.first); } + final isExceedsScreenSize = _composerManager.isExceedsScreenSize( + screenWidth: context.width, + ); + + if (isExceedsScreenSize) { + _composerManager.syncComposerQueue(screenWidth: context.width); + } + final countComposerHidden = _composerManager.countComposerHidden; final visibleComposers = composerIdsQueue .map(_composerManager.getComposerView) diff --git a/lib/features/composer/presentation/extensions/update_screen_display_mode_extension.dart b/lib/features/composer/presentation/extensions/update_screen_display_mode_extension.dart index 23703c20c..20640977a 100644 --- a/lib/features/composer/presentation/extensions/update_screen_display_mode_extension.dart +++ b/lib/features/composer/presentation/extensions/update_screen_display_mode_extension.dart @@ -47,10 +47,7 @@ extension UpdateScreenDisplayModeExtension on ComposerController { final composerManager = mailboxDashBoardController.composerManager; final screenWidth = responsiveUtils.getSizeScreenWidth(currentContext!); - if (!composerManager.isExceedsScreenSize( - screenWidth: screenWidth, - composerIdsQueue: composerManager.composerIdsQueue, - )) { + if (!composerManager.isExceedsScreenSize(screenWidth: screenWidth)) { return; } diff --git a/lib/features/composer/presentation/manager/composer_manager.dart b/lib/features/composer/presentation/manager/composer_manager.dart index 3c717d4a8..14b9b6f77 100644 --- a/lib/features/composer/presentation/manager/composer_manager.dart +++ b/lib/features/composer/presentation/manager/composer_manager.dart @@ -70,10 +70,7 @@ class ComposerManager extends GetxController { .firstWhereOrNull((id) => getComposerView(id).controller.isNormalScreen); } - bool isExceedsScreenSize({ - required Queue composerIdsQueue, - required double screenWidth, - }) { + bool isExceedsScreenSize({required double screenWidth}) { final availableWidth = screenWidth - ComposerUtils.composerExpandMoreButtonMaxWidth - ComposerUtils.horizontalPadding * 2; @@ -142,6 +139,31 @@ class ComposerManager extends GetxController { ComposerView? get firstFullScreenComposerView => composers.values .firstWhereOrNull((composerView) => composerView.controller.isFullScreen); + ComposerView? get firstComposerViewWhenResponsiveChanged { + final conditionsMap = { + ScreenDisplayMode.fullScreen: composers.values.where((view) => view.controller.isFullScreen).toList(), + ScreenDisplayMode.normal: composers.values.where((view) => view.controller.isNormalScreen).toList(), + ScreenDisplayMode.minimize: composers.values.where((view) => view.controller.isMinimizeScreen).toList(), + ScreenDisplayMode.hidden: composers.values.where((view) => view.controller.isHiddenScreen).toList(), + }; + + if (conditionsMap[ScreenDisplayMode.fullScreen]!.isNotEmpty) { + return conditionsMap[ScreenDisplayMode.fullScreen]!.first; + } + + if (conditionsMap[ScreenDisplayMode.normal]!.isNotEmpty) { + return conditionsMap[ScreenDisplayMode.normal]!.first; + } + + if (conditionsMap[ScreenDisplayMode.minimize]!.isNotEmpty) { + return conditionsMap[ScreenDisplayMode.minimize]!.first; + } + + return conditionsMap[ScreenDisplayMode.hidden]!.isNotEmpty + ? conditionsMap[ScreenDisplayMode.hidden]!.first + : null; + } + ComposerView getComposerView(String id) => composers[id]!; @override