diff --git a/frontend/appflowy_flutter/lib/plugins/database/application/cell/bloc/date_cell_editor_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database/application/cell/bloc/date_cell_editor_bloc.dart index 2a828bc953..2dd35aba10 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/application/cell/bloc/date_cell_editor_bloc.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/application/cell/bloc/date_cell_editor_bloc.dart @@ -206,7 +206,7 @@ class DateCellEditorBloc endDate: endDate, reminderId: reminderId, ); - result.fold((_) {}, (err) => Log.error(err)); + result.onFailure(Log.error); } Future _updateIsRange(bool isRange) async { @@ -218,7 +218,7 @@ class DateCellEditorBloc endDate: endDateTime, isRange: isRange, ); - result.fold((_) {}, (err) => Log.error(err)); + result.onFailure(Log.error); } Future _updateIncludeTime(bool includeTime) async { @@ -229,12 +229,12 @@ class DateCellEditorBloc endDate: endDateTime, includeTime: includeTime, ); - result.fold((_) {}, (err) => Log.error(err)); + result.onFailure(Log.error); } Future _clearDate() async { final result = await _dateCellBackendService.clear(); - result.fold((_) {}, (err) => Log.error(err)); + result.onFailure(Log.error); } String timeFormatPrompt(FlowyError error) { diff --git a/frontend/appflowy_flutter/lib/plugins/database/board/application/board_bloc.dart b/frontend/appflowy_flutter/lib/plugins/database/board/application/board_bloc.dart index f1b9c3f8be..2807913ce1 100644 --- a/frontend/appflowy_flutter/lib/plugins/database/board/application/board_bloc.dart +++ b/frontend/appflowy_flutter/lib/plugins/database/board/application/board_bloc.dart @@ -146,18 +146,18 @@ class BoardBloc extends Bloc { }, createGroup: (name) async { final result = await groupBackendSvc.createGroup(name: name); - result.fold((_) {}, (err) => Log.error(err)); + result.onFailure(Log.error); }, deleteGroup: (groupId) async { final result = await groupBackendSvc.deleteGroup(groupId: groupId); - result.fold((_) {}, (err) => Log.error(err)); + result.onFailure(Log.error); }, renameGroup: (groupId, name) async { final result = await groupBackendSvc.updateGroup( groupId: groupId, name: name, ); - result.fold((_) {}, (err) => Log.error(err)); + result.onFailure(Log.error); }, didReceiveError: (error) { emit(BoardState.error(error: error)); diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/widgets/date_picker/appflowy_date_picker.dart b/frontend/appflowy_flutter/lib/workspace/presentation/widgets/date_picker/appflowy_date_picker.dart index 5ad194a55f..bdfc2ef3e8 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/widgets/date_picker/appflowy_date_picker.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/widgets/date_picker/appflowy_date_picker.dart @@ -107,20 +107,18 @@ class AppFlowyDatePickerState extends State { @override void didUpdateWidget(covariant oldWidget) { - setState(() { - dateTime = widget.dateTime; - if (widget.isRange) { - startDateTime = widget.dateTime; - endDateTime = widget.endDateTime; - } else { - startDateTime = endDateTime = null; - } - includeTime = widget.includeTime; - isRange = widget.isRange; - if (oldWidget.reminderOption != widget.reminderOption) { - reminderOption = widget.reminderOption; - } - }); + dateTime = widget.dateTime; + if (widget.isRange) { + startDateTime = widget.dateTime; + endDateTime = widget.endDateTime; + } else { + startDateTime = endDateTime = null; + } + includeTime = widget.includeTime; + isRange = widget.isRange; + if (oldWidget.reminderOption != widget.reminderOption) { + reminderOption = widget.reminderOption; + } super.didUpdateWidget(oldWidget); } diff --git a/frontend/appflowy_flutter/lib/workspace/presentation/widgets/date_picker/mobile_appflowy_date_picker.dart b/frontend/appflowy_flutter/lib/workspace/presentation/widgets/date_picker/mobile_appflowy_date_picker.dart index c3e029a138..d2d1fefae0 100644 --- a/frontend/appflowy_flutter/lib/workspace/presentation/widgets/date_picker/mobile_appflowy_date_picker.dart +++ b/frontend/appflowy_flutter/lib/workspace/presentation/widgets/date_picker/mobile_appflowy_date_picker.dart @@ -87,20 +87,18 @@ class _MobileAppFlowyDatePickerState extends State { @override void didUpdateWidget(covariant oldWidget) { - setState(() { - dateTime = widget.dateTime; - if (widget.isRange) { - startDateTime = widget.dateTime; - endDateTime = widget.endDateTime; - } else { - startDateTime = endDateTime = null; - } - includeTime = widget.includeTime; - isRange = widget.isRange; - if (oldWidget.reminderOption != widget.reminderOption) { - reminderOption = widget.reminderOption; - } - }); + dateTime = widget.dateTime; + if (widget.isRange) { + startDateTime = widget.dateTime; + endDateTime = widget.endDateTime; + } else { + startDateTime = endDateTime = null; + } + includeTime = widget.includeTime; + isRange = widget.isRange; + if (oldWidget.reminderOption != widget.reminderOption) { + reminderOption = widget.reminderOption; + } super.didUpdateWidget(oldWidget); } diff --git a/frontend/appflowy_flutter/pubspec.lock b/frontend/appflowy_flutter/pubspec.lock index c6e9279c62..f8cda142c5 100644 --- a/frontend/appflowy_flutter/pubspec.lock +++ b/frontend/appflowy_flutter/pubspec.lock @@ -1543,10 +1543,10 @@ packages: dependency: transitive description: name: platform - sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.5" + version: "3.1.4" plugin_platform_interface: dependency: "direct dev" description: @@ -1941,10 +1941,10 @@ packages: dependency: transitive description: name: string_scanner - sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.2.0" string_validator: dependency: "direct main" description: @@ -2246,10 +2246,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "14.2.5" + version: "14.2.1" watcher: dependency: transitive description: diff --git a/frontend/appflowy_flutter/test/bloc_test/grid_test/cell/date_cell_bloc_test.dart b/frontend/appflowy_flutter/test/bloc_test/grid_test/cell/date_cell_bloc_test.dart index 5277c74759..35c81b31c0 100644 --- a/frontend/appflowy_flutter/test/bloc_test/grid_test/cell/date_cell_bloc_test.dart +++ b/frontend/appflowy_flutter/test/bloc_test/grid_test/cell/date_cell_bloc_test.dart @@ -77,7 +77,42 @@ void main() { expect(bloc.state.endDateTime, null); }); - test('end time', () async { + test('end time basic', () async { + final reminderBloc = ReminderBloc(); + final bloc = DateCellEditorBloc( + cellController: cellController, + reminderBloc: reminderBloc, + ); + await gridResponseFuture(); + + expect(bloc.state.isRange, false); + expect(bloc.state.dateTime, null); + expect(bloc.state.endDateTime, null); + + final now = DateTime.now(); + bloc.add(DateCellEditorEvent.updateDateTime(now)); + await gridResponseFuture(); + + expect(bloc.state.isRange, false); + expect(bloc.state.dateTime!.isAtSameMinuteAs(now), true); + expect(bloc.state.endDateTime, null); + + bloc.add(const DateCellEditorEvent.setIsRange(true)); + await gridResponseFuture(); + + expect(bloc.state.isRange, true); + expect(bloc.state.dateTime!.isAtSameMinuteAs(now), true); + expect(bloc.state.endDateTime!.isAtSameMinuteAs(now), true); + + bloc.add(const DateCellEditorEvent.setIsRange(false)); + await gridResponseFuture(); + + expect(bloc.state.isRange, false); + expect(bloc.state.dateTime!.isAtSameMinuteAs(now), true); + expect(bloc.state.endDateTime, null); + }); + + test('end time from empty', () async { final reminderBloc = ReminderBloc(); final bloc = DateCellEditorBloc( cellController: cellController, diff --git a/frontend/rust-lib/flowy-database2/src/services/field/type_options/date_type_option/date_type_option.rs b/frontend/rust-lib/flowy-database2/src/services/field/type_options/date_type_option/date_type_option.rs index a7bc56d019..58fe5beab9 100644 --- a/frontend/rust-lib/flowy-database2/src/services/field/type_options/date_type_option/date_type_option.rs +++ b/frontend/rust-lib/flowy-database2/src/services/field/type_options/date_type_option/date_type_option.rs @@ -34,7 +34,11 @@ impl TypeOptionCellDataSerde for DateTypeOption { let is_range = cell_data.is_range; let timestamp = cell_data.timestamp; - let end_timestamp = cell_data.end_timestamp; + let end_timestamp = if is_range { + cell_data.end_timestamp.or(timestamp) + } else { + None + }; let reminder_id = cell_data.reminder_id; @@ -190,7 +194,7 @@ impl CellDataChangeset for DateTypeOption { let timestamp = changeset.timestamp.or(timestamp); let end_timestamp = if is_range && timestamp.is_some() { - changeset.end_timestamp.or(end_timestamp) + changeset.end_timestamp.or(end_timestamp).or(timestamp) } else { None };