TF-3472 Prefer at least two attachment for mobile

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-03-10 12:23:35 +07:00
committed by Dat H. Pham
parent 3da5b5863d
commit 5c6a995107
4 changed files with 234 additions and 23 deletions
@@ -1,8 +1,10 @@
import 'package:collection/collection.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/mail/mail_address.dart';
import 'package:flutter/material.dart';
import 'package:get/get_utils/src/get_utils/get_utils.dart';
import 'package:dartz/dartz.dart';
import 'package:http_parser/http_parser.dart';
@@ -17,11 +19,14 @@ import 'package:model/email/attachment.dart';
import 'package:tmail_ui_user/features/email/domain/state/download_attachment_for_web_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/get_html_content_from_attachment_state.dart';
import 'package:tmail_ui_user/features/email/presentation/model/email_unsubscribe.dart';
import 'package:tmail_ui_user/features/email/presentation/styles/attachment/attachment_item_widget_style.dart';
import 'package:tmail_ui_user/features/email/presentation/styles/email_attachments_styles.dart';
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
import 'package:tmail_ui_user/main/error/capability_validator.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
class EmailUtils {
EmailUtils._();
static Properties getPropertiesForEmailGetMethod(Session session, AccountId accountId) {
if (CapabilityIdentifier.jamesCalendarEvent.isSupported(session, accountId)) {
@@ -225,4 +230,38 @@ class EmailUtils {
recipientRecord.ccMailAddresses.isNotEmpty ||
recipientRecord.bccMailAddresses.isNotEmpty;
}
static List<Attachment> getAttachmentDisplayed({
required BuildContext context,
required double maxWidth,
required bool platformIsMobile,
required List<Attachment> attachments,
required ResponsiveUtils responsiveUtils,
}) {
if (attachments.isEmpty) return [];
final bool isMobile = responsiveUtils.isMobile(context);
log('EmailUtils::getAttachmentDisplayed:isMobile = $isMobile:');
if (isMobile) {
return attachments.length < 3 ? attachments : attachments.sublist(0, 2);
}
final double maxWidthItem = AttachmentItemWidgetStyle.getMaxWidthItem(
platformIsMobile: platformIsMobile,
responsiveIsMobile: isMobile,
responsiveIsTablet: responsiveUtils.isTablet(context),
responsiveIsTabletLarge: responsiveUtils.isTabletLarge(context),
);
log('EmailUtils::getAttachmentDisplayed:maxWidthItem = $maxWidthItem:');
final int possibleDisplayedCount =
((maxWidth - EmailAttachmentsStyles.buttonMoreMaxWidth) ~/ maxWidthItem)
.clamp(0, attachments.length);
log('EmailUtils::getAttachmentDisplayed:possibleDisplayedCount = $possibleDisplayedCount:');
return possibleDisplayedCount == 0
? [attachments.first]
: attachments.sublist(0, possibleDisplayedCount);
}
}