Files
workavia-mail-front/lib/features/email/presentation/widgets/received_time_builder.dart
T
DatDang 0c372d0465 TF-3881 Thread Detail Reply action only for collapsed email
TF-3881 Thread Detail Hide sender email on collapsed or mobile view

TF-3881 Thread Detail Show attachment icon on collapsed

TF-3881 Thread Detail Update date format of received email time

Thread Detail update context menu
2025-07-21 05:34:53 +07:00

58 lines
1.9 KiB
Dart

import 'package:core/domain/extensions/datetime_extension.dart';
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/utils/style_utils.dart';
import 'package:core/presentation/utils/theme_utils.dart';
import 'package:flutter/material.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart';
import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/presentation_email_extension.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class ReceivedTimeBuilder extends StatelessWidget {
final PresentationEmail emailSelected;
final EdgeInsetsGeometry? padding;
final bool showDaysAgo;
const ReceivedTimeBuilder({
Key? key,
required this.emailSelected,
this.padding,
this.showDaysAgo = false,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final appLocalizations = AppLocalizations.of(context);
final daysPast = getDaysPast(emailSelected.receivedAt, appLocalizations);
return Padding(
padding: padding ?? const EdgeInsetsDirectional.only(start: 16),
child: Text(
emailSelected.getReceivedAt(
Localizations.localeOf(context).toLanguageTag(),
pattern: emailSelected.receivedAt?.value.toLocal().toPatternForEmailView()
).toLowerCase() + daysPast,
maxLines: 1,
overflow: CommonTextStyle.defaultTextOverFlow,
softWrap: CommonTextStyle.defaultSoftWrap,
style: ThemeUtils.textStyleBodyBody3(color: AppColor.steelGray400).copyWith(
height: 1,
letterSpacing: -0.14
),
),
);
}
String getDaysPast(UTCDate? utcDate, AppLocalizations appLocalizations) {
if (!showDaysAgo || utcDate == null) return '';
final from = utcDate.value;
final to = DateTime.now();
if (from.isAfter(to)) return '';
final days = to.difference(from).inDays;
return appLocalizations.daysAgo(days);
}
}