mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-12-27 15:13:46 +00:00
fix: v0.7.3 additional launch review session issues (#6730)
* fix: focusedDay on is range toggle * fix: attempt to fix date reminder * chore: alignment issue on windows * chore: use onFailure * chore: default for set reminder * chore: code style * fix: add reminder bug * fix: checklist item alignment * fix: date cell reminders * chore: regard cell datetime as correct * fix: reminder creation date * chore: bump collab that fixes reminders * test: add date cell and reminder bloc test * chore: bump collab * chore: revert visual density change * fix: submitting date time text field makes it flash * fix: improve behavior of phantom checklist item --------- Co-authored-by: Mathias Mogensen <mathias@appflowy.io>
This commit is contained in:
parent
4e1532af3e
commit
bd7976d005
@ -13,6 +13,7 @@ import 'package:appflowy/workspace/presentation/widgets/date_picker/widgets/remi
|
||||
import 'package:appflowy_backend/log.dart';
|
||||
import 'package:appflowy_backend/protobuf/flowy-database2/date_entities.pb.dart';
|
||||
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
|
||||
import 'package:appflowy_result/appflowy_result.dart';
|
||||
import 'package:calendar_view/calendar_view.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:easy_localization/easy_localization.dart'
|
||||
@ -54,59 +55,18 @@ class DateCellEditorBloc
|
||||
didReceiveCellUpdate: (DateCellDataPB? cellData) {
|
||||
final dateCellData = DateCellData.fromPB(cellData);
|
||||
|
||||
ReminderOption option = state.reminderOption;
|
||||
final cellReminderId = dateCellData.reminderId;
|
||||
ReminderOption reminderOption = ReminderOption.none;
|
||||
|
||||
if (dateCellData.dateTime != null &&
|
||||
state.reminderId.isEmpty &&
|
||||
state.reminderOption != ReminderOption.none &&
|
||||
cellReminderId.isNotEmpty) {
|
||||
final date = state.reminderOption.withoutTime
|
||||
? dateCellData.dateTime!.withoutTime
|
||||
: dateCellData.dateTime!;
|
||||
|
||||
// Add Reminder
|
||||
_reminderBloc.add(
|
||||
ReminderEvent.addById(
|
||||
reminderId: dateCellData.reminderId,
|
||||
objectId: cellController.viewId,
|
||||
meta: {
|
||||
ReminderMetaKeys.includeTime: true.toString(),
|
||||
ReminderMetaKeys.rowId: cellController.rowId,
|
||||
},
|
||||
scheduledAt: Int64(
|
||||
state.reminderOption
|
||||
.getNotificationDateTime(date)
|
||||
.millisecondsSinceEpoch ~/
|
||||
1000,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if (cellReminderId.isNotEmpty && dateCellData.dateTime != null) {
|
||||
if (option.requiresNoTime && dateCellData.includeTime) {
|
||||
option = ReminderOption.atTimeOfEvent;
|
||||
} else if (!option.withoutTime && !dateCellData.includeTime) {
|
||||
option = ReminderOption.onDayOfEvent;
|
||||
if (dateCellData.reminderId.isNotEmpty &&
|
||||
dateCellData.dateTime != null) {
|
||||
final reminder = _reminderBloc.state.reminders
|
||||
.firstWhereOrNull((r) => r.id == dateCellData.reminderId);
|
||||
if (reminder != null) {
|
||||
reminderOption = ReminderOption.fromDateDifference(
|
||||
dateCellData.dateTime!,
|
||||
reminder.scheduledAt.toDateTime(),
|
||||
);
|
||||
}
|
||||
|
||||
final date = option.withoutTime
|
||||
? dateCellData.dateTime!.withoutTime
|
||||
: dateCellData.dateTime!;
|
||||
|
||||
final scheduledAt = option.getNotificationDateTime(date);
|
||||
|
||||
// Update Reminder
|
||||
_reminderBloc.add(
|
||||
ReminderEvent.update(
|
||||
ReminderUpdate(
|
||||
id: dateCellData.reminderId,
|
||||
scheduledAt: scheduledAt,
|
||||
includeTime: true,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
emit(
|
||||
@ -116,7 +76,7 @@ class DateCellEditorBloc
|
||||
includeTime: dateCellData.includeTime,
|
||||
isRange: dateCellData.isRange,
|
||||
reminderId: dateCellData.reminderId,
|
||||
reminderOption: option,
|
||||
reminderOption: reminderOption,
|
||||
),
|
||||
);
|
||||
},
|
||||
@ -158,81 +118,55 @@ class DateCellEditorBloc
|
||||
|
||||
await _clearDate();
|
||||
},
|
||||
setReminderOption: (
|
||||
ReminderOption option,
|
||||
) async {
|
||||
if (option == ReminderOption.none && state.reminderId.isNotEmpty) {
|
||||
_reminderBloc.add(
|
||||
ReminderEvent.remove(reminderId: state.reminderId),
|
||||
);
|
||||
await _updateDateData(reminderId: "");
|
||||
} else if (state.reminderId.isEmpty) {
|
||||
// New Reminder
|
||||
final reminderId = nanoid();
|
||||
await _updateDateData(
|
||||
reminderId: reminderId,
|
||||
date: state.dateTime ?? DateTime.now().withoutTime,
|
||||
);
|
||||
} else if (state.dateTime != null) {
|
||||
// Update reminder
|
||||
final scheduledAt =
|
||||
option.getNotificationDateTime(state.dateTime!);
|
||||
_reminderBloc.add(
|
||||
ReminderEvent.update(
|
||||
ReminderUpdate(
|
||||
id: state.reminderId,
|
||||
scheduledAt: scheduledAt,
|
||||
includeTime: true,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
removeReminder: () async {
|
||||
await _updateDateData(reminderId: "");
|
||||
setReminderOption: (ReminderOption option) async {
|
||||
await _setReminderOption(option);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _updateDateData({
|
||||
Future<FlowyResult<void, FlowyError>> _updateDateData({
|
||||
DateTime? date,
|
||||
DateTime? endDate,
|
||||
String? reminderId,
|
||||
bool updateReminderIfNecessary = true,
|
||||
}) async {
|
||||
final result = await _dateCellBackendService.update(
|
||||
date: date,
|
||||
endDate: endDate,
|
||||
reminderId: reminderId,
|
||||
);
|
||||
result.onFailure(Log.error);
|
||||
if (updateReminderIfNecessary) {
|
||||
result.onSuccess((_) => _updateReminderIfNecessary(date));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<void> _updateIsRange(
|
||||
bool isRange,
|
||||
DateTime? dateTime,
|
||||
DateTime? endDateTime,
|
||||
) async {
|
||||
final result = await _dateCellBackendService.update(
|
||||
date: dateTime,
|
||||
endDate: endDateTime,
|
||||
isRange: isRange,
|
||||
);
|
||||
result.onFailure(Log.error);
|
||||
) {
|
||||
return _dateCellBackendService
|
||||
.update(
|
||||
date: dateTime,
|
||||
endDate: endDateTime,
|
||||
isRange: isRange,
|
||||
)
|
||||
.fold((s) => _updateReminderIfNecessary(dateTime), Log.error);
|
||||
}
|
||||
|
||||
Future<void> _updateIncludeTime(
|
||||
bool includeTime,
|
||||
DateTime? dateTime,
|
||||
DateTime? endDateTime,
|
||||
) async {
|
||||
final result = await _dateCellBackendService.update(
|
||||
date: dateTime,
|
||||
endDate: endDateTime,
|
||||
includeTime: includeTime,
|
||||
);
|
||||
result.onFailure(Log.error);
|
||||
) {
|
||||
return _dateCellBackendService
|
||||
.update(
|
||||
date: dateTime,
|
||||
endDate: endDateTime,
|
||||
includeTime: includeTime,
|
||||
)
|
||||
.fold((s) => _updateReminderIfNecessary(dateTime), Log.error);
|
||||
}
|
||||
|
||||
Future<void> _clearDate() async {
|
||||
@ -240,6 +174,98 @@ class DateCellEditorBloc
|
||||
result.onFailure(Log.error);
|
||||
}
|
||||
|
||||
Future<void> _setReminderOption(ReminderOption option) async {
|
||||
if (state.reminderId.isEmpty) {
|
||||
if (option == ReminderOption.none) {
|
||||
// do nothing
|
||||
return;
|
||||
}
|
||||
// if no date, fill it first
|
||||
final fillerDateTime =
|
||||
state.includeTime ? DateTime.now() : DateTime.now().withoutTime;
|
||||
if (state.dateTime == null) {
|
||||
final result = await _updateDateData(
|
||||
date: fillerDateTime,
|
||||
endDate: state.isRange ? fillerDateTime : null,
|
||||
updateReminderIfNecessary: false,
|
||||
);
|
||||
// return if filling date is unsuccessful
|
||||
if (result.isFailure) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// create a reminder
|
||||
final reminderId = nanoid();
|
||||
await _updateCellReminderId(reminderId);
|
||||
final dateTime = state.dateTime ?? fillerDateTime;
|
||||
_reminderBloc.add(
|
||||
ReminderEvent.addById(
|
||||
reminderId: reminderId,
|
||||
objectId: cellController.viewId,
|
||||
meta: {
|
||||
ReminderMetaKeys.includeTime: state.includeTime.toString(),
|
||||
ReminderMetaKeys.rowId: cellController.rowId,
|
||||
},
|
||||
scheduledAt: Int64(
|
||||
option.getNotificationDateTime(dateTime).millisecondsSinceEpoch ~/
|
||||
1000,
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
if (option == ReminderOption.none) {
|
||||
// remove reminder from reminder bloc and cell data
|
||||
_reminderBloc.add(ReminderEvent.remove(reminderId: state.reminderId));
|
||||
await _updateCellReminderId("");
|
||||
} else {
|
||||
// Update reminder
|
||||
final scheduledAt = option.getNotificationDateTime(state.dateTime!);
|
||||
_reminderBloc.add(
|
||||
ReminderEvent.update(
|
||||
ReminderUpdate(
|
||||
id: state.reminderId,
|
||||
scheduledAt: scheduledAt,
|
||||
includeTime: state.includeTime,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _updateCellReminderId(
|
||||
String reminderId,
|
||||
) async {
|
||||
final result = await _dateCellBackendService.update(
|
||||
reminderId: reminderId,
|
||||
);
|
||||
result.onFailure(Log.error);
|
||||
}
|
||||
|
||||
void _updateReminderIfNecessary(
|
||||
DateTime? dateTime,
|
||||
) {
|
||||
if (state.reminderId.isEmpty ||
|
||||
state.reminderOption == ReminderOption.none ||
|
||||
dateTime == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final scheduledAt = state.reminderOption.getNotificationDateTime(dateTime);
|
||||
|
||||
// Update Reminder
|
||||
_reminderBloc.add(
|
||||
ReminderEvent.update(
|
||||
ReminderUpdate(
|
||||
id: state.reminderId,
|
||||
scheduledAt: scheduledAt,
|
||||
includeTime: state.includeTime,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
String timeFormatPrompt(FlowyError error) {
|
||||
return switch (state.dateTypeOptionPB.timeFormat) {
|
||||
TimeFormatPB.TwelveHour =>
|
||||
@ -300,7 +326,7 @@ class DateCellEditorBloc
|
||||
typeOptionData: newDateTypeOption.writeToBuffer(),
|
||||
);
|
||||
|
||||
result.fold((_) => {}, (err) => Log.error(err));
|
||||
result.onFailure(Log.error);
|
||||
}
|
||||
}
|
||||
|
||||
@ -338,8 +364,6 @@ class DateCellEditorEvent with _$DateCellEditorEvent {
|
||||
const factory DateCellEditorEvent.setReminderOption(ReminderOption option) =
|
||||
_SetReminderOption;
|
||||
|
||||
const factory DateCellEditorEvent.removeReminder() = _RemoveReminder;
|
||||
|
||||
// date field type options are modified
|
||||
const factory DateCellEditorEvent.setTimeFormat(TimeFormatPB timeFormat) =
|
||||
_SetTimeFormat;
|
||||
|
||||
@ -55,6 +55,14 @@ class ChecklistRowDetailCell extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _ChecklistRowDetailCellState extends State<ChecklistRowDetailCell> {
|
||||
final phantomTextController = TextEditingController();
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
phantomTextController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Align(
|
||||
@ -69,6 +77,7 @@ class _ChecklistRowDetailCellState extends State<ChecklistRowDetailCell> {
|
||||
),
|
||||
const VSpace(2.0),
|
||||
_ChecklistItems(
|
||||
phantomTextController: phantomTextController,
|
||||
onStartCreatingTaskAfter: (index) {
|
||||
context
|
||||
.read<ChecklistCellBloc>()
|
||||
@ -80,6 +89,7 @@ class _ChecklistRowDetailCellState extends State<ChecklistRowDetailCell> {
|
||||
onTap: () {
|
||||
final bloc = context.read<ChecklistCellBloc>();
|
||||
if (bloc.state.phantomIndex == null) {
|
||||
phantomTextController.clear();
|
||||
bloc.add(
|
||||
ChecklistCellEvent.updatePhantomIndex(
|
||||
bloc.state.showIncompleteOnly
|
||||
@ -89,6 +99,13 @@ class _ChecklistRowDetailCellState extends State<ChecklistRowDetailCell> {
|
||||
: bloc.state.tasks.length,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
bloc.add(
|
||||
ChecklistCellEvent.createNewTask(
|
||||
phantomTextController.text,
|
||||
index: bloc.state.phantomIndex,
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
@ -153,9 +170,11 @@ class ProgressAndHideCompleteButton extends StatelessWidget {
|
||||
|
||||
class _ChecklistItems extends StatelessWidget {
|
||||
const _ChecklistItems({
|
||||
required this.phantomTextController,
|
||||
required this.onStartCreatingTaskAfter,
|
||||
});
|
||||
|
||||
final TextEditingController phantomTextController;
|
||||
final void Function(int index) onStartCreatingTaskAfter;
|
||||
|
||||
@override
|
||||
@ -165,6 +184,7 @@ class _ChecklistItems extends StatelessWidget {
|
||||
_CancelCreatingFromPhantomIntent:
|
||||
CallbackAction<_CancelCreatingFromPhantomIntent>(
|
||||
onInvoke: (_CancelCreatingFromPhantomIntent intent) {
|
||||
phantomTextController.clear();
|
||||
context
|
||||
.read<ChecklistCellBloc>()
|
||||
.add(const ChecklistCellEvent.updatePhantomIndex(null));
|
||||
@ -240,7 +260,10 @@ class _ChecklistItems extends StatelessWidget {
|
||||
Padding(
|
||||
key: const ValueKey('new_checklist_cell_task'),
|
||||
padding: const EdgeInsets.symmetric(vertical: 2.0),
|
||||
child: PhantomChecklistItem(index: state.phantomIndex!),
|
||||
child: PhantomChecklistItem(
|
||||
index: state.phantomIndex!,
|
||||
textController: phantomTextController,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
@ -268,16 +291,17 @@ class PhantomChecklistItem extends StatefulWidget {
|
||||
const PhantomChecklistItem({
|
||||
super.key,
|
||||
required this.index,
|
||||
required this.textController,
|
||||
});
|
||||
|
||||
final int index;
|
||||
final TextEditingController textController;
|
||||
|
||||
@override
|
||||
State<PhantomChecklistItem> createState() => _PhantomChecklistItemState();
|
||||
}
|
||||
|
||||
class _PhantomChecklistItemState extends State<PhantomChecklistItem> {
|
||||
TextEditingController textController = TextEditingController();
|
||||
final focusNode = FocusNode();
|
||||
|
||||
bool isComposing = false;
|
||||
@ -285,18 +309,19 @@ class _PhantomChecklistItemState extends State<PhantomChecklistItem> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
textController.addListener(_onTextChanged);
|
||||
widget.textController.addListener(_onTextChanged);
|
||||
focusNode.addListener(_onFocusChanged);
|
||||
WidgetsBinding.instance
|
||||
.addPostFrameCallback((_) => focusNode.requestFocus());
|
||||
}
|
||||
|
||||
void _onTextChanged() =>
|
||||
setState(() => isComposing = !textController.value.composing.isCollapsed);
|
||||
void _onTextChanged() => setState(
|
||||
() => isComposing = !widget.textController.value.composing.isCollapsed,
|
||||
);
|
||||
|
||||
void _onFocusChanged() {
|
||||
if (!focusNode.hasFocus) {
|
||||
textController.clear();
|
||||
widget.textController.clear();
|
||||
Actions.maybeInvoke(
|
||||
context,
|
||||
const _CancelCreatingFromPhantomIntent(),
|
||||
@ -306,8 +331,7 @@ class _PhantomChecklistItemState extends State<PhantomChecklistItem> {
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
textController.removeListener(_onTextChanged);
|
||||
textController.dispose();
|
||||
widget.textController.removeListener(_onTextChanged);
|
||||
focusNode.removeListener(_onFocusChanged);
|
||||
focusNode.dispose();
|
||||
super.dispose();
|
||||
@ -319,15 +343,13 @@ class _PhantomChecklistItemState extends State<PhantomChecklistItem> {
|
||||
actions: {
|
||||
_SubmitPhantomTaskIntent: CallbackAction<_SubmitPhantomTaskIntent>(
|
||||
onInvoke: (_SubmitPhantomTaskIntent intent) {
|
||||
if (intent.taskDescription.isNotEmpty) {
|
||||
context.read<ChecklistCellBloc>().add(
|
||||
ChecklistCellEvent.createNewTask(
|
||||
intent.taskDescription,
|
||||
index: intent.index,
|
||||
),
|
||||
);
|
||||
}
|
||||
textController.clear();
|
||||
context.read<ChecklistCellBloc>().add(
|
||||
ChecklistCellEvent.createNewTask(
|
||||
intent.taskDescription,
|
||||
index: intent.index,
|
||||
),
|
||||
);
|
||||
widget.textController.clear();
|
||||
return;
|
||||
},
|
||||
),
|
||||
@ -342,11 +364,11 @@ class _PhantomChecklistItemState extends State<PhantomChecklistItem> {
|
||||
),
|
||||
child: Center(
|
||||
child: ChecklistCellTextfield(
|
||||
textController: textController,
|
||||
textController: widget.textController,
|
||||
focusNode: focusNode,
|
||||
contentPadding: const EdgeInsets.symmetric(
|
||||
horizontal: 10,
|
||||
vertical: 10,
|
||||
vertical: 8,
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -361,7 +383,7 @@ class _PhantomChecklistItemState extends State<PhantomChecklistItem> {
|
||||
: {
|
||||
const SingleActivator(LogicalKeyboardKey.enter):
|
||||
_SubmitPhantomTaskIntent(
|
||||
taskDescription: textController.text,
|
||||
taskDescription: widget.textController.text,
|
||||
index: widget.index,
|
||||
),
|
||||
const SingleActivator(LogicalKeyboardKey.escape):
|
||||
@ -386,39 +408,41 @@ class ChecklistItemControl extends StatelessWidget {
|
||||
return ChangeNotifierProvider.value(
|
||||
value: cellNotifer,
|
||||
child: Consumer<CellContainerNotifier>(
|
||||
builder: (buildContext, notifier, _) => GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
margin: const EdgeInsets.fromLTRB(8.0, 2.0, 8.0, 0),
|
||||
height: 12,
|
||||
child: AnimatedSwitcher(
|
||||
duration: const Duration(milliseconds: 150),
|
||||
child: notifier.isHover
|
||||
? FlowyTooltip(
|
||||
message: LocaleKeys.grid_checklist_addNew.tr(),
|
||||
child: Row(
|
||||
children: [
|
||||
const Flexible(child: Center(child: Divider())),
|
||||
const HSpace(12.0),
|
||||
FilledButton(
|
||||
style: FilledButton.styleFrom(
|
||||
minimumSize: const Size.square(12),
|
||||
maximumSize: const Size.square(12),
|
||||
padding: EdgeInsets.zero,
|
||||
builder: (buildContext, notifier, _) => TextFieldTapRegion(
|
||||
child: GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
margin: const EdgeInsets.fromLTRB(8.0, 2.0, 8.0, 0),
|
||||
height: 12,
|
||||
child: AnimatedSwitcher(
|
||||
duration: const Duration(milliseconds: 150),
|
||||
child: notifier.isHover
|
||||
? FlowyTooltip(
|
||||
message: LocaleKeys.grid_checklist_addNew.tr(),
|
||||
child: Row(
|
||||
children: [
|
||||
const Flexible(child: Center(child: Divider())),
|
||||
const HSpace(12.0),
|
||||
FilledButton(
|
||||
style: FilledButton.styleFrom(
|
||||
minimumSize: const Size.square(12),
|
||||
maximumSize: const Size.square(12),
|
||||
padding: EdgeInsets.zero,
|
||||
),
|
||||
onPressed: onTap,
|
||||
child: FlowySvg(
|
||||
FlowySvgs.add_s,
|
||||
color: Theme.of(context).colorScheme.onPrimary,
|
||||
),
|
||||
),
|
||||
onPressed: onTap,
|
||||
child: FlowySvg(
|
||||
FlowySvgs.add_s,
|
||||
color: Theme.of(context).colorScheme.onPrimary,
|
||||
),
|
||||
),
|
||||
const HSpace(12.0),
|
||||
const Flexible(child: Center(child: Divider())),
|
||||
],
|
||||
),
|
||||
)
|
||||
: const SizedBox.expand(),
|
||||
const HSpace(12.0),
|
||||
const Flexible(child: Center(child: Divider())),
|
||||
],
|
||||
),
|
||||
)
|
||||
: const SizedBox.expand(),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@ -442,7 +442,7 @@ class _NewTaskItemState extends State<NewTaskItem> {
|
||||
? Theme.of(context).colorScheme.primaryContainer
|
||||
: Theme.of(context).disabledColor,
|
||||
fontColor: Theme.of(context).colorScheme.onPrimary,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
||||
onPressed: isCreateButtonEnabled
|
||||
? () {
|
||||
context.read<ChecklistCellBloc>().add(
|
||||
|
||||
@ -42,7 +42,7 @@ class ChecklistCellTextfield extends StatelessWidget {
|
||||
required this.focusNode,
|
||||
this.onChanged,
|
||||
this.contentPadding = const EdgeInsets.symmetric(
|
||||
vertical: 10,
|
||||
vertical: 8,
|
||||
horizontal: 2,
|
||||
),
|
||||
this.onSubmitted,
|
||||
|
||||
@ -271,7 +271,7 @@ abstract class AppFlowyDatePickerState<T extends AppFlowyDatePicker>
|
||||
|
||||
setState(() {
|
||||
isRange = value;
|
||||
dateTime = newDateTime;
|
||||
dateTime = focusedDateTime = newDateTime;
|
||||
if (value) {
|
||||
startDateTime = endDateTime = newDateTime;
|
||||
} else {
|
||||
|
||||
@ -228,12 +228,11 @@ class DesktopAppFlowyDatePickerState
|
||||
|
||||
@override
|
||||
void onDateTimeInputSubmitted(DateTime value) {
|
||||
refreshStartTextFieldNotifier.refresh();
|
||||
if (isRange) {
|
||||
DateTime end = endDateTime ?? value;
|
||||
if (end.isBefore(value)) {
|
||||
(value, end) = (end, value);
|
||||
refreshEndTextFieldNotifier.refresh();
|
||||
refreshStartTextFieldNotifier.refresh();
|
||||
}
|
||||
|
||||
widget.onRangeSelected?.call(value, end);
|
||||
@ -255,7 +254,6 @@ class DesktopAppFlowyDatePickerState
|
||||
|
||||
@override
|
||||
void onEndDateTimeInputSubmitted(DateTime value) {
|
||||
refreshEndTextFieldNotifier.refresh();
|
||||
if (isRange) {
|
||||
if (endDateTime == null) {
|
||||
value = combineDateTimes(value, widget.endDateTime);
|
||||
@ -263,7 +261,7 @@ class DesktopAppFlowyDatePickerState
|
||||
DateTime start = startDateTime ?? value;
|
||||
if (value.isBefore(start)) {
|
||||
(start, value) = (value, start);
|
||||
refreshStartTextFieldNotifier.refresh();
|
||||
refreshEndTextFieldNotifier.refresh();
|
||||
}
|
||||
|
||||
widget.onRangeSelected?.call(start, value);
|
||||
|
||||
@ -124,10 +124,14 @@ enum ReminderOption {
|
||||
required this.time,
|
||||
this.withoutTime = false,
|
||||
this.requiresNoTime = false,
|
||||
});
|
||||
}) : assert(!requiresNoTime || withoutTime);
|
||||
|
||||
final Duration time;
|
||||
|
||||
/// If true, don't consider the time component of the dateTime
|
||||
final bool withoutTime;
|
||||
|
||||
/// If true, [withoutTime] must be true as well. Will add time instead of subtract to get notification time.
|
||||
final bool requiresNoTime;
|
||||
|
||||
bool get timeExempt =>
|
||||
@ -190,10 +194,11 @@ enum ReminderOption {
|
||||
_ => ReminderOption.custom,
|
||||
};
|
||||
|
||||
DateTime getNotificationDateTime(DateTime date) => switch (withoutTime) {
|
||||
true => requiresNoTime
|
||||
DateTime getNotificationDateTime(DateTime date) {
|
||||
return withoutTime
|
||||
? requiresNoTime
|
||||
? date.withoutTime.add(time)
|
||||
: date.withoutTime.subtract(time),
|
||||
_ => date.subtract(time),
|
||||
};
|
||||
: date.withoutTime.subtract(time)
|
||||
: date.subtract(time);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,7 +2,9 @@ import 'package:appflowy/plugins/database/application/cell/bloc/date_cell_editor
|
||||
import 'package:appflowy/plugins/database/application/cell/cell_controller_builder.dart';
|
||||
import 'package:appflowy/plugins/database/domain/field_service.dart';
|
||||
import 'package:appflowy/user/application/reminder/reminder_bloc.dart';
|
||||
import 'package:appflowy/workspace/presentation/widgets/date_picker/widgets/reminder_selector.dart';
|
||||
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
|
||||
import 'package:fixnum/fixnum.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:time/time.dart';
|
||||
|
||||
@ -249,5 +251,141 @@ void main() {
|
||||
TimeFormatPB.TwelveHour,
|
||||
);
|
||||
});
|
||||
|
||||
test('set reminder option', () async {
|
||||
final reminderBloc = ReminderBloc();
|
||||
final bloc = DateCellEditorBloc(
|
||||
cellController: cellController,
|
||||
reminderBloc: reminderBloc,
|
||||
);
|
||||
await gridResponseFuture();
|
||||
|
||||
expect(reminderBloc.state.reminders.length, 0);
|
||||
|
||||
final now = DateTime.now();
|
||||
final threeDaysFromToday = DateTime(now.year, now.month, now.day + 3);
|
||||
final fourDaysFromToday = DateTime(now.year, now.month, now.day + 4);
|
||||
final fiveDaysFromToday = DateTime(now.year, now.month, now.day + 5);
|
||||
|
||||
bloc.add(DateCellEditorEvent.updateDateTime(threeDaysFromToday));
|
||||
await gridResponseFuture();
|
||||
|
||||
bloc.add(
|
||||
const DateCellEditorEvent.setReminderOption(
|
||||
ReminderOption.onDayOfEvent,
|
||||
),
|
||||
);
|
||||
await gridResponseFuture();
|
||||
|
||||
expect(reminderBloc.state.reminders.length, 1);
|
||||
expect(
|
||||
reminderBloc.state.reminders.first.scheduledAt,
|
||||
Int64(
|
||||
threeDaysFromToday
|
||||
.add(const Duration(hours: 9))
|
||||
.millisecondsSinceEpoch ~/
|
||||
1000,
|
||||
),
|
||||
);
|
||||
|
||||
reminderBloc.add(const ReminderEvent.refresh());
|
||||
await gridResponseFuture();
|
||||
|
||||
expect(reminderBloc.state.reminders.length, 1);
|
||||
expect(
|
||||
reminderBloc.state.reminders.first.scheduledAt,
|
||||
Int64(
|
||||
threeDaysFromToday
|
||||
.add(const Duration(hours: 9))
|
||||
.millisecondsSinceEpoch ~/
|
||||
1000,
|
||||
),
|
||||
);
|
||||
|
||||
bloc.add(DateCellEditorEvent.updateDateTime(fourDaysFromToday));
|
||||
await gridResponseFuture();
|
||||
expect(reminderBloc.state.reminders.length, 1);
|
||||
expect(
|
||||
reminderBloc.state.reminders.first.scheduledAt,
|
||||
Int64(
|
||||
fourDaysFromToday
|
||||
.add(const Duration(hours: 9))
|
||||
.millisecondsSinceEpoch ~/
|
||||
1000,
|
||||
),
|
||||
);
|
||||
|
||||
bloc.add(DateCellEditorEvent.updateDateTime(fiveDaysFromToday));
|
||||
await gridResponseFuture();
|
||||
reminderBloc.add(const ReminderEvent.refresh());
|
||||
await gridResponseFuture();
|
||||
expect(reminderBloc.state.reminders.length, 1);
|
||||
expect(
|
||||
reminderBloc.state.reminders.first.scheduledAt,
|
||||
Int64(
|
||||
fiveDaysFromToday
|
||||
.add(const Duration(hours: 9))
|
||||
.millisecondsSinceEpoch ~/
|
||||
1000,
|
||||
),
|
||||
);
|
||||
|
||||
bloc.add(
|
||||
const DateCellEditorEvent.setReminderOption(
|
||||
ReminderOption.twoDaysBefore,
|
||||
),
|
||||
);
|
||||
await gridResponseFuture();
|
||||
expect(reminderBloc.state.reminders.length, 1);
|
||||
expect(
|
||||
reminderBloc.state.reminders.first.scheduledAt,
|
||||
Int64(
|
||||
threeDaysFromToday
|
||||
.add(const Duration(hours: 9))
|
||||
.millisecondsSinceEpoch ~/
|
||||
1000,
|
||||
),
|
||||
);
|
||||
|
||||
bloc.add(
|
||||
const DateCellEditorEvent.setReminderOption(ReminderOption.none),
|
||||
);
|
||||
await gridResponseFuture();
|
||||
expect(reminderBloc.state.reminders.length, 0);
|
||||
reminderBloc.add(const ReminderEvent.refresh());
|
||||
await gridResponseFuture();
|
||||
expect(reminderBloc.state.reminders.length, 0);
|
||||
});
|
||||
|
||||
test('set reminder option from empty', () async {
|
||||
final reminderBloc = ReminderBloc();
|
||||
final bloc = DateCellEditorBloc(
|
||||
cellController: cellController,
|
||||
reminderBloc: reminderBloc,
|
||||
);
|
||||
await gridResponseFuture();
|
||||
|
||||
final now = DateTime.now();
|
||||
final today = DateTime(now.year, now.month, now.day);
|
||||
bloc.add(
|
||||
const DateCellEditorEvent.setReminderOption(
|
||||
ReminderOption.onDayOfEvent,
|
||||
),
|
||||
);
|
||||
await gridResponseFuture();
|
||||
|
||||
expect(bloc.state.dateTime, today);
|
||||
expect(reminderBloc.state.reminders.length, 1);
|
||||
expect(
|
||||
reminderBloc.state.reminders.first.scheduledAt,
|
||||
Int64(
|
||||
today.add(const Duration(hours: 9)).millisecondsSinceEpoch ~/ 1000,
|
||||
),
|
||||
);
|
||||
|
||||
bloc.add(const DateCellEditorEvent.clearDate());
|
||||
await gridResponseFuture();
|
||||
expect(reminderBloc.state.reminders.length, 0);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
40
frontend/appflowy_tauri/src-tauri/Cargo.lock
generated
40
frontend/appflowy_tauri/src-tauri/Cargo.lock
generated
@ -172,7 +172,7 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
||||
[[package]]
|
||||
name = "app-error"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -192,7 +192,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "appflowy-ai-client"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -888,7 +888,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "client-api"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"again",
|
||||
"anyhow",
|
||||
@ -943,7 +943,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "client-api-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"collab-entity",
|
||||
"collab-rt-entity",
|
||||
@ -956,7 +956,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "client-websocket"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
@ -1030,7 +1030,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -1055,7 +1055,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-database"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -1094,7 +1094,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-document"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -1115,7 +1115,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-entity"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -1135,7 +1135,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-folder"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -1157,7 +1157,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-importer"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-recursion",
|
||||
@ -1218,7 +1218,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-plugins"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
@ -1256,7 +1256,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-rt-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -1281,7 +1281,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-rt-protocol"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -1298,7 +1298,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-user"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"collab",
|
||||
@ -1678,7 +1678,7 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
|
||||
[[package]]
|
||||
name = "database-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -3265,7 +3265,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "gotrue"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"futures-util",
|
||||
@ -3282,7 +3282,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "gotrue-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -3714,7 +3714,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "infra"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -6398,7 +6398,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "shared-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
|
||||
@ -120,14 +120,14 @@ custom-protocol = ["tauri/custom-protocol"]
|
||||
# To switch to the local path, run:
|
||||
# scripts/tool/update_collab_source.sh
|
||||
# ⚠️⚠️⚠️️
|
||||
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-importer = { version = "0.1", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-importer = { version = "0.1", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
|
||||
# Working directory: frontend
|
||||
# To update the commit ID, run:
|
||||
|
||||
40
frontend/appflowy_web_app/src-tauri/Cargo.lock
generated
40
frontend/appflowy_web_app/src-tauri/Cargo.lock
generated
@ -163,7 +163,7 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
||||
[[package]]
|
||||
name = "app-error"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -183,7 +183,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "appflowy-ai-client"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -877,7 +877,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "client-api"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"again",
|
||||
"anyhow",
|
||||
@ -932,7 +932,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "client-api-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"collab-entity",
|
||||
"collab-rt-entity",
|
||||
@ -945,7 +945,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "client-websocket"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
@ -1028,7 +1028,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -1053,7 +1053,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-database"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -1092,7 +1092,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-document"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -1113,7 +1113,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-entity"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -1133,7 +1133,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-folder"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -1155,7 +1155,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-importer"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-recursion",
|
||||
@ -1216,7 +1216,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-plugins"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
@ -1254,7 +1254,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-rt-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
@ -1279,7 +1279,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-rt-protocol"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -1296,7 +1296,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-user"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=4175465382020f1bd9cd9aa0e0766178eac7b4e5#4175465382020f1bd9cd9aa0e0766178eac7b4e5"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"collab",
|
||||
@ -1683,7 +1683,7 @@ checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
|
||||
[[package]]
|
||||
name = "database-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -3347,7 +3347,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "gotrue"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"futures-util",
|
||||
@ -3364,7 +3364,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "gotrue-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
@ -3801,7 +3801,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "infra"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -6478,7 +6478,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "shared-entity"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=4643e568d2d9b725b0d06dfbbf351317cf9a2c9f#4643e568d2d9b725b0d06dfbbf351317cf9a2c9f"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud?rev=e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a#e31e541d07b8ef5e3f33b0b3dd54ebc22a79f86a"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"app-error",
|
||||
|
||||
@ -118,14 +118,14 @@ custom-protocol = ["tauri/custom-protocol"]
|
||||
# To switch to the local path, run:
|
||||
# scripts/tool/update_collab_source.sh
|
||||
# ⚠️⚠️⚠️️
|
||||
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab-importer = { version = "0.1", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "4175465382020f1bd9cd9aa0e0766178eac7b4e5" }
|
||||
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-importer = { version = "0.1", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
|
||||
|
||||
# Working directory: frontend
|
||||
|
||||
16
frontend/rust-lib/Cargo.lock
generated
16
frontend/rust-lib/Cargo.lock
generated
@ -891,7 +891,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=be6bb90faac22ca8443a950ea3deafc7ec99b3a8#be6bb90faac22ca8443a950ea3deafc7ec99b3a8"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -916,7 +916,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-database"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=be6bb90faac22ca8443a950ea3deafc7ec99b3a8#be6bb90faac22ca8443a950ea3deafc7ec99b3a8"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -955,7 +955,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-document"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=be6bb90faac22ca8443a950ea3deafc7ec99b3a8#be6bb90faac22ca8443a950ea3deafc7ec99b3a8"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -976,7 +976,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-entity"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=be6bb90faac22ca8443a950ea3deafc7ec99b3a8#be6bb90faac22ca8443a950ea3deafc7ec99b3a8"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -996,7 +996,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-folder"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=be6bb90faac22ca8443a950ea3deafc7ec99b3a8#be6bb90faac22ca8443a950ea3deafc7ec99b3a8"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -1018,7 +1018,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-importer"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=be6bb90faac22ca8443a950ea3deafc7ec99b3a8#be6bb90faac22ca8443a950ea3deafc7ec99b3a8"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-recursion",
|
||||
@ -1079,7 +1079,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-plugins"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=be6bb90faac22ca8443a950ea3deafc7ec99b3a8#be6bb90faac22ca8443a950ea3deafc7ec99b3a8"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
@ -1159,7 +1159,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-user"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=be6bb90faac22ca8443a950ea3deafc7ec99b3a8#be6bb90faac22ca8443a950ea3deafc7ec99b3a8"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=092527156c6ce997f7278388a3658c3217a02765#092527156c6ce997f7278388a3658c3217a02765"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"collab",
|
||||
|
||||
@ -142,14 +142,14 @@ rocksdb = { git = "https://github.com/rust-rocksdb/rust-rocksdb", rev = "1710120
|
||||
# To switch to the local path, run:
|
||||
# scripts/tool/update_collab_source.sh
|
||||
# ⚠️⚠️⚠️️
|
||||
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "be6bb90faac22ca8443a950ea3deafc7ec99b3a8" }
|
||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "be6bb90faac22ca8443a950ea3deafc7ec99b3a8" }
|
||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "be6bb90faac22ca8443a950ea3deafc7ec99b3a8" }
|
||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "be6bb90faac22ca8443a950ea3deafc7ec99b3a8" }
|
||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "be6bb90faac22ca8443a950ea3deafc7ec99b3a8" }
|
||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "be6bb90faac22ca8443a950ea3deafc7ec99b3a8" }
|
||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "be6bb90faac22ca8443a950ea3deafc7ec99b3a8" }
|
||||
collab-importer = { version = "0.1", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "be6bb90faac22ca8443a950ea3deafc7ec99b3a8" }
|
||||
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
collab-importer = { version = "0.1", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "092527156c6ce997f7278388a3658c3217a02765" }
|
||||
|
||||
# Working directory: frontend
|
||||
# To update the commit ID, run:
|
||||
|
||||
@ -73,8 +73,16 @@ impl UserManager {
|
||||
let reminder = Reminder::from(reminder_pb);
|
||||
self
|
||||
.mut_awareness(|user_awareness| {
|
||||
user_awareness.update_reminder(&reminder.id, |new_reminder| {
|
||||
new_reminder.clone_from(&reminder)
|
||||
user_awareness.update_reminder(&reminder.id, |update| {
|
||||
update
|
||||
.set_object_id(&reminder.object_id)
|
||||
.set_title(&reminder.title)
|
||||
.set_message(&reminder.message)
|
||||
.set_is_ack(reminder.is_ack)
|
||||
.set_is_read(reminder.is_read)
|
||||
.set_scheduled_at(reminder.scheduled_at)
|
||||
.set_type(reminder.ty)
|
||||
.set_meta(reminder.meta.clone().into_inner());
|
||||
});
|
||||
})
|
||||
.await?;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user