TF-2638 Change logic of storing value for VacationPresentation

This commit is contained in:
Dat PHAM HOANG
2024-02-27 11:56:43 +07:00
committed by Dat H. Pham
parent 1160338147
commit c118affbcf
2 changed files with 40 additions and 36 deletions
@@ -1,4 +1,6 @@
import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/core/utc_date.dart';
@@ -6,7 +8,7 @@ import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/vacation_responder_status.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/vacation_responder_status.dart';
class VacationPresentation with EquatableMixin { class VacationPresentation with EquatableMixin, OptionParamMixin {
final VacationResponderStatus status; final VacationResponderStatus status;
final DateTime? startDate; final DateTime? startDate;
final TimeOfDay? startTime; final TimeOfDay? startTime;
@@ -33,26 +35,26 @@ class VacationPresentation with EquatableMixin {
return VacationPresentation(); return VacationPresentation();
} }
VacationPresentation copyWidth({ VacationPresentation copyWith({
VacationResponderStatus? status, VacationResponderStatus? status,
DateTime? startDate, Option<DateTime>? startDateOption,
TimeOfDay? startTime, Option<TimeOfDay>? startTimeOption,
DateTime? endDate, Option<DateTime>? endDateOption,
TimeOfDay? endTime, Option<TimeOfDay>? endTimeOption,
String? messagePlainText, Option<String>? messagePlainTextOption,
String? messageHtmlText, Option<String>? messageHtmlTextOption,
String? subject, Option<String>? subjectOption,
bool? vacationStopEnabled, bool? vacationStopEnabled,
}) { }) {
return VacationPresentation( return VacationPresentation(
status: status ?? this.status, status: status ?? this.status,
startDate: startDate ?? this.startDate, startDate: getOptionParam(startDateOption, startDate),
startTime: startTime ?? this.startTime, startTime: getOptionParam(startTimeOption, startTime),
endDate: endDate ?? this.endDate, endDate: getOptionParam(endDateOption, endDate),
endTime: endTime ?? this.endTime, endTime: getOptionParam(endTimeOption, endTime),
messagePlainText: messagePlainText ?? this.messagePlainText, messagePlainText: getOptionParam(messagePlainTextOption, messagePlainText),
messageHtmlText: messageHtmlText ?? this.messageHtmlText, messageHtmlText: getOptionParam(messageHtmlTextOption, messageHtmlText),
subject: subject ?? this.subject, subject: getOptionParam(subjectOption, subject),
vacationStopEnabled: vacationStopEnabled ?? this.vacationStopEnabled vacationStopEnabled: vacationStopEnabled ?? this.vacationStopEnabled
); );
} }
@@ -1,4 +1,5 @@
import 'package:core/core.dart'; import 'package:core/core.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart'; import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart';
@@ -129,24 +130,25 @@ class VacationController extends BaseController {
void updateVacationPresentation({ void updateVacationPresentation({
VacationResponderStatus? newStatus, VacationResponderStatus? newStatus,
DateTime? startDate, Option<DateTime>? startDateOption,
TimeOfDay? startTime, Option<TimeOfDay>? startTimeOption,
DateTime? endDate, Option<DateTime>? endDateOption,
TimeOfDay? endTime, Option<TimeOfDay>? endTimeOption,
bool? vacationStopEnabled, bool? vacationStopEnabled,
String? messagePlainText, Option<String>? messagePlainTextOption,
String? messageHtmlText, Option<String>? messageHtmlTextOption,
}) { }) {
final currentVacation = vacationPresentation.value; final currentVacation = vacationPresentation.value;
final newVacation = currentVacation.copyWidth( final stopEnabled = vacationStopEnabled ?? currentVacation.vacationStopEnabled;
final newVacation = currentVacation.copyWith(
status: newStatus, status: newStatus,
startDate: startDate, startDateOption: startDateOption,
startTime: startTime, startTimeOption: startTimeOption,
endDate: endDate, endDateOption: stopEnabled ? endDateOption : const None(),
endTime: endTime, endTimeOption: stopEnabled ? endTimeOption : const None(),
vacationStopEnabled: vacationStopEnabled, vacationStopEnabled: vacationStopEnabled,
messagePlainText: messagePlainText, messagePlainTextOption: messagePlainTextOption,
messageHtmlText: messageHtmlText messageHtmlTextOption: messageHtmlTextOption
); );
log('VacationController::updateVacationPresentation():newVacation: $newVacation'); log('VacationController::updateVacationPresentation():newVacation: $newVacation');
vacationPresentation.value = newVacation; vacationPresentation.value = newVacation;
@@ -187,9 +189,9 @@ class VacationController extends BaseController {
} }
if (dateType == DateType.start) { if (dateType == DateType.start) {
updateVacationPresentation(startDate: datePicked); updateVacationPresentation(startDateOption: Some(datePicked));
} else { } else {
updateVacationPresentation(endDate: datePicked); updateVacationPresentation(endDateOption: Some(datePicked));
} }
} }
@@ -221,9 +223,9 @@ class VacationController extends BaseController {
} }
if (dateType == DateType.start) { if (dateType == DateType.start) {
updateVacationPresentation(startTime: timePicked); updateVacationPresentation(startTimeOption: Some(timePicked));
} else { } else {
updateVacationPresentation(endTime: timePicked); updateVacationPresentation(endTimeOption: Some(timePicked));
} }
} }
@@ -281,9 +283,9 @@ class VacationController extends BaseController {
final subjectVacation = subjectTextController.text; final subjectVacation = subjectTextController.text;
final newVacationPresentation = vacationPresentation.value.copyWidth( final newVacationPresentation = vacationPresentation.value.copyWith(
messageHtmlText: messageHtmlText, messageHtmlTextOption: Some(messageHtmlText),
subject: subjectVacation subjectOption: Some(subjectVacation)
); );
log('VacationController::saveVacation(): newVacationPresentation: $newVacationPresentation'); log('VacationController::saveVacation(): newVacationPresentation: $newVacationPresentation');
final newVacationResponse = newVacationPresentation.toVacationResponse(); final newVacationResponse = newVacationPresentation.toVacationResponse();