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:
Richard Shiue 2024-11-07 13:33:12 +03:00 committed by GitHub
parent 4e1532af3e
commit bd7976d005
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 441 additions and 244 deletions

View File

@ -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;

View File

@ -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(),
),
),
),
),

View File

@ -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(

View File

@ -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,

View File

@ -271,7 +271,7 @@ abstract class AppFlowyDatePickerState<T extends AppFlowyDatePicker>
setState(() {
isRange = value;
dateTime = newDateTime;
dateTime = focusedDateTime = newDateTime;
if (value) {
startDateTime = endDateTime = newDateTime;
} else {

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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);
});
});
}

View File

@ -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",

View File

@ -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:

View File

@ -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",

View File

@ -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

View File

@ -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",

View File

@ -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:

View File

@ -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?;