mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-09-01 12:54:44 +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,
|
endDate: endDate,
|
||||||
reminderId: reminderId,
|
reminderId: reminderId,
|
||||||
);
|
);
|
||||||
result.fold((_) {}, (err) => Log.error(err));
|
result.onFailure(Log.error);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _updateIsRange(bool isRange) async {
|
Future<void> _updateIsRange(bool isRange) async {
|
||||||
@ -218,7 +218,7 @@ class DateCellEditorBloc
|
|||||||
endDate: endDateTime,
|
endDate: endDateTime,
|
||||||
isRange: isRange,
|
isRange: isRange,
|
||||||
);
|
);
|
||||||
result.fold((_) {}, (err) => Log.error(err));
|
result.onFailure(Log.error);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _updateIncludeTime(bool includeTime) async {
|
Future<void> _updateIncludeTime(bool includeTime) async {
|
||||||
@ -229,12 +229,12 @@ class DateCellEditorBloc
|
|||||||
endDate: endDateTime,
|
endDate: endDateTime,
|
||||||
includeTime: includeTime,
|
includeTime: includeTime,
|
||||||
);
|
);
|
||||||
result.fold((_) {}, (err) => Log.error(err));
|
result.onFailure(Log.error);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _clearDate() async {
|
Future<void> _clearDate() async {
|
||||||
final result = await _dateCellBackendService.clear();
|
final result = await _dateCellBackendService.clear();
|
||||||
result.fold((_) {}, (err) => Log.error(err));
|
result.onFailure(Log.error);
|
||||||
}
|
}
|
||||||
|
|
||||||
String timeFormatPrompt(FlowyError error) {
|
String timeFormatPrompt(FlowyError error) {
|
||||||
|
@ -146,18 +146,18 @@ class BoardBloc extends Bloc<BoardEvent, BoardState> {
|
|||||||
},
|
},
|
||||||
createGroup: (name) async {
|
createGroup: (name) async {
|
||||||
final result = await groupBackendSvc.createGroup(name: name);
|
final result = await groupBackendSvc.createGroup(name: name);
|
||||||
result.fold((_) {}, (err) => Log.error(err));
|
result.onFailure(Log.error);
|
||||||
},
|
},
|
||||||
deleteGroup: (groupId) async {
|
deleteGroup: (groupId) async {
|
||||||
final result = await groupBackendSvc.deleteGroup(groupId: groupId);
|
final result = await groupBackendSvc.deleteGroup(groupId: groupId);
|
||||||
result.fold((_) {}, (err) => Log.error(err));
|
result.onFailure(Log.error);
|
||||||
},
|
},
|
||||||
renameGroup: (groupId, name) async {
|
renameGroup: (groupId, name) async {
|
||||||
final result = await groupBackendSvc.updateGroup(
|
final result = await groupBackendSvc.updateGroup(
|
||||||
groupId: groupId,
|
groupId: groupId,
|
||||||
name: name,
|
name: name,
|
||||||
);
|
);
|
||||||
result.fold((_) {}, (err) => Log.error(err));
|
result.onFailure(Log.error);
|
||||||
},
|
},
|
||||||
didReceiveError: (error) {
|
didReceiveError: (error) {
|
||||||
emit(BoardState.error(error: error));
|
emit(BoardState.error(error: error));
|
||||||
|
@ -107,20 +107,18 @@ class AppFlowyDatePickerState extends State<AppFlowyDatePicker> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void didUpdateWidget(covariant oldWidget) {
|
void didUpdateWidget(covariant oldWidget) {
|
||||||
setState(() {
|
dateTime = widget.dateTime;
|
||||||
dateTime = widget.dateTime;
|
if (widget.isRange) {
|
||||||
if (widget.isRange) {
|
startDateTime = widget.dateTime;
|
||||||
startDateTime = widget.dateTime;
|
endDateTime = widget.endDateTime;
|
||||||
endDateTime = widget.endDateTime;
|
} else {
|
||||||
} else {
|
startDateTime = endDateTime = null;
|
||||||
startDateTime = endDateTime = null;
|
}
|
||||||
}
|
includeTime = widget.includeTime;
|
||||||
includeTime = widget.includeTime;
|
isRange = widget.isRange;
|
||||||
isRange = widget.isRange;
|
if (oldWidget.reminderOption != widget.reminderOption) {
|
||||||
if (oldWidget.reminderOption != widget.reminderOption) {
|
reminderOption = widget.reminderOption;
|
||||||
reminderOption = widget.reminderOption;
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
super.didUpdateWidget(oldWidget);
|
super.didUpdateWidget(oldWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,20 +87,18 @@ class _MobileAppFlowyDatePickerState extends State<MobileAppFlowyDatePicker> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void didUpdateWidget(covariant oldWidget) {
|
void didUpdateWidget(covariant oldWidget) {
|
||||||
setState(() {
|
dateTime = widget.dateTime;
|
||||||
dateTime = widget.dateTime;
|
if (widget.isRange) {
|
||||||
if (widget.isRange) {
|
startDateTime = widget.dateTime;
|
||||||
startDateTime = widget.dateTime;
|
endDateTime = widget.endDateTime;
|
||||||
endDateTime = widget.endDateTime;
|
} else {
|
||||||
} else {
|
startDateTime = endDateTime = null;
|
||||||
startDateTime = endDateTime = null;
|
}
|
||||||
}
|
includeTime = widget.includeTime;
|
||||||
includeTime = widget.includeTime;
|
isRange = widget.isRange;
|
||||||
isRange = widget.isRange;
|
if (oldWidget.reminderOption != widget.reminderOption) {
|
||||||
if (oldWidget.reminderOption != widget.reminderOption) {
|
reminderOption = widget.reminderOption;
|
||||||
reminderOption = widget.reminderOption;
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
super.didUpdateWidget(oldWidget);
|
super.didUpdateWidget(oldWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1543,10 +1543,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: platform
|
name: platform
|
||||||
sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
|
sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.5"
|
version: "3.1.4"
|
||||||
plugin_platform_interface:
|
plugin_platform_interface:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@ -1941,10 +1941,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: string_scanner
|
name: string_scanner
|
||||||
sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
|
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0"
|
version: "1.2.0"
|
||||||
string_validator:
|
string_validator:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -2246,10 +2246,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
|
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "14.2.5"
|
version: "14.2.1"
|
||||||
watcher:
|
watcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -77,7 +77,42 @@ void main() {
|
|||||||
expect(bloc.state.endDateTime, null);
|
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 reminderBloc = ReminderBloc();
|
||||||
final bloc = DateCellEditorBloc(
|
final bloc = DateCellEditorBloc(
|
||||||
cellController: cellController,
|
cellController: cellController,
|
||||||
|
@ -34,7 +34,11 @@ impl TypeOptionCellDataSerde for DateTypeOption {
|
|||||||
let is_range = cell_data.is_range;
|
let is_range = cell_data.is_range;
|
||||||
|
|
||||||
let timestamp = cell_data.timestamp;
|
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;
|
let reminder_id = cell_data.reminder_id;
|
||||||
|
|
||||||
@ -190,7 +194,7 @@ impl CellDataChangeset for DateTypeOption {
|
|||||||
|
|
||||||
let timestamp = changeset.timestamp.or(timestamp);
|
let timestamp = changeset.timestamp.or(timestamp);
|
||||||
let end_timestamp = if is_range && timestamp.is_some() {
|
let end_timestamp = if is_range && timestamp.is_some() {
|
||||||
changeset.end_timestamp.or(end_timestamp)
|
changeset.end_timestamp.or(end_timestamp).or(timestamp)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user