Skip to content

Commit a178546

Browse files
committed
chore: save date cell data with time
1 parent 6fb163b commit a178546

File tree

3 files changed

+40
-53
lines changed

3 files changed

+40
-53
lines changed

frontend/app_flowy/lib/workspace/application/grid/cell/cell_service/data_persistence.dart

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,9 @@ class CellDataPersistence implements _GridCellDataPersistence<String> {
2727
}
2828
}
2929

30-
class DateCellPersistenceData {
31-
final DateTime date;
32-
final String? time;
33-
DateCellPersistenceData({
34-
required this.date,
35-
this.time,
36-
});
30+
@freezed
31+
class DateCellPersistenceData with _$DateCellPersistenceData {
32+
const factory DateCellPersistenceData({required DateTime date, String? time}) = _DateCellPersistenceData;
3733
}
3834

3935
class NumberCellDataPersistence implements _GridCellDataPersistence<DateCellPersistenceData> {

frontend/app_flowy/lib/workspace/application/grid/cell/date_cal_bloc.dart

Lines changed: 29 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import 'package:table_calendar/table_calendar.dart';
99
import 'dart:async';
1010
import 'cell_service/cell_service.dart';
1111
import 'package:dartz/dartz.dart';
12-
import 'package:fixnum/fixnum.dart' as $fixnum;
1312
import 'package:protobuf/protobuf.dart';
1413
part 'date_cal_bloc.freezed.dart';
1514

@@ -30,9 +29,13 @@ class DateCalBloc extends Bloc<DateCalEvent, DateCalState> {
3029
// await _loadDateTypeOption(emit);
3130
},
3231
selectDay: (_SelectDay value) {
33-
if (!isSameDay(state.selectedDay, value.day)) {
34-
_updateCellData(value.day);
35-
emit(state.copyWith(selectedDay: value.day));
32+
if (state.dateData != null) {
33+
if (!isSameDay(state.dateData!.date, value.day)) {
34+
final newDateData = state.dateData!.copyWith(date: value.day);
35+
emit(state.copyWith(dateData: newDateData));
36+
}
37+
} else {
38+
emit(state.copyWith(dateData: DateCellPersistenceData(date: value.day)));
3639
}
3740
},
3841
setCalFormat: (_CalendarFormat value) {
@@ -52,7 +55,12 @@ class DateCalBloc extends Bloc<DateCalEvent, DateCalState> {
5255
await _updateTypeOption(emit, timeFormat: value.timeFormat);
5356
},
5457
setTime: (_Time value) {
55-
//
58+
if (state.dateData != null) {
59+
final newDateData = state.dateData!.copyWith(time: value.time);
60+
emit(state.copyWith(dateData: newDateData));
61+
} else {
62+
emit(state.copyWith(dateData: DateCellPersistenceData(date: DateTime.now(), time: value.time)));
63+
}
5664
},
5765
);
5866
},
@@ -79,33 +87,6 @@ class DateCalBloc extends Bloc<DateCalEvent, DateCalState> {
7987
);
8088
}
8189

82-
// ignore: unused_element
83-
Future<void> _loadDateTypeOption(Emitter<DateCalState> emit) async {
84-
final result = await cellContext.getTypeOptionData();
85-
result.fold(
86-
(data) {
87-
final typeOptionData = DateTypeOption.fromBuffer(data);
88-
DateTime? selectedDay;
89-
final cellData = cellContext.getCellData()?.data;
90-
91-
if (cellData != null) {
92-
final timestamp = $fixnum.Int64.parseInt(cellData).toInt();
93-
selectedDay = DateTime.fromMillisecondsSinceEpoch(timestamp * 1000);
94-
}
95-
96-
emit(state.copyWith(
97-
dateTypeOption: typeOptionData,
98-
selectedDay: selectedDay,
99-
));
100-
},
101-
(err) => Log.error(err),
102-
);
103-
}
104-
105-
void _updateCellData(DateTime day) {
106-
cellContext.saveCellData(DateCellPersistenceData(date: day));
107-
}
108-
10990
Future<void>? _updateTypeOption(
11091
Emitter<DateCalState> emit, {
11192
DateFormat? dateFormat,
@@ -161,19 +142,25 @@ class DateCalState with _$DateCalState {
161142
required DateTime focusedDay,
162143
required String time,
163144
required Option<FlowyError> inputTimeError,
164-
DateTime? selectedDay,
145+
DateCellPersistenceData? dateData,
165146
}) = _DateCalState;
166147

167148
factory DateCalState.initial(
168149
DateTypeOption dateTypeOption,
169150
DateTime? selectedDay,
170-
) =>
171-
DateCalState(
172-
dateTypeOption: dateTypeOption,
173-
format: CalendarFormat.month,
174-
focusedDay: DateTime.now(),
175-
selectedDay: selectedDay,
176-
time: "",
177-
inputTimeError: none(),
178-
);
151+
) {
152+
DateCellPersistenceData? dateData;
153+
if (selectedDay != null) {
154+
dateData = DateCellPersistenceData(date: selectedDay);
155+
}
156+
157+
return DateCalState(
158+
dateTypeOption: dateTypeOption,
159+
format: CalendarFormat.month,
160+
focusedDay: DateTime.now(),
161+
dateData: dateData,
162+
time: "",
163+
inputTimeError: none(),
164+
);
165+
}
179166
}

frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/date_cell/calendar.dart

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,11 @@ class _CellCalendarWidget extends StatelessWidget {
112112
)..add(const DateCalEvent.initial()),
113113
child: BlocConsumer<DateCalBloc, DateCalState>(
114114
listener: (context, state) {
115-
if (state.selectedDay != null) {
116-
onSelected(DateCellPersistenceData(date: state.selectedDay!));
115+
if (state.dateData != null) {
116+
onSelected(state.dateData!);
117117
}
118118
},
119-
listenWhen: (p, c) => p.selectedDay != c.selectedDay,
119+
listenWhen: (p, c) => p.dateData != c.dateData,
120120
builder: (context, state) {
121121
List<Widget> children = [];
122122

@@ -190,7 +190,11 @@ class _CellCalendarWidget extends StatelessWidget {
190190
),
191191
),
192192
selectedDayPredicate: (day) {
193-
return isSameDay(state.selectedDay, day);
193+
if (state.dateData != null) {
194+
return isSameDay(state.dateData!.date, day);
195+
} else {
196+
return false;
197+
}
194198
},
195199
onDaySelected: (selectedDay, focusedDay) {
196200
context.read<DateCalBloc>().add(DateCalEvent.selectDay(selectedDay));

0 commit comments

Comments
 (0)