mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-08-31 20:35:05 +00:00
fix: date picker code improvements and regressions (#6619)
* chore: improve handling result's error variant * chore: dont call setState in didUpdateWidget * fix: don't make assumptions on provided data
This commit is contained in:
parent
c821454df8
commit
128ff594be
@ -206,7 +206,7 @@ class DateCellEditorBloc
|
||||
endDate: endDate,
|
||||
reminderId: reminderId,
|
||||
);
|
||||
result.fold((_) {}, (err) => Log.error(err));
|
||||
result.onFailure(Log.error);
|
||||
}
|
||||
|
||||
Future<void> _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<void> _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<void> _clearDate() async {
|
||||
final result = await _dateCellBackendService.clear();
|
||||
result.fold((_) {}, (err) => Log.error(err));
|
||||
result.onFailure(Log.error);
|
||||
}
|
||||
|
||||
String timeFormatPrompt(FlowyError error) {
|
||||
|
@ -146,18 +146,18 @@ class BoardBloc extends Bloc<BoardEvent, BoardState> {
|
||||
},
|
||||
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));
|
||||
|
@ -107,20 +107,18 @@ class AppFlowyDatePickerState extends State<AppFlowyDatePicker> {
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
|
@ -87,20 +87,18 @@ class _MobileAppFlowyDatePickerState extends State<MobileAppFlowyDatePicker> {
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user