mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
parent
5878379b2e
commit
d0ce65f711
@ -2,7 +2,9 @@ import 'dart:async';
|
||||
import 'dart:collection';
|
||||
|
||||
import 'package:appflowy/plugins/database/application/row/row_service.dart';
|
||||
import 'package:appflowy_backend/dispatch/dispatch.dart';
|
||||
import 'package:appflowy_backend/log.dart';
|
||||
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
|
||||
|
||||
import '../defines.dart';
|
||||
import '../field/field_controller.dart';
|
||||
@ -91,6 +93,17 @@ class DatabaseViewCache {
|
||||
(reorderRow) => _rowCache.reorderSingleRow(reorderRow),
|
||||
(err) => Log.error(err),
|
||||
),
|
||||
onReloadRows: () {
|
||||
final payload = DatabaseViewIdPB(value: viewId);
|
||||
DatabaseEventGetAllRows(payload).send().then((result) {
|
||||
result.fold(
|
||||
(rows) {
|
||||
_rowCache.setInitialRows(rows.items);
|
||||
},
|
||||
(err) => Log.error(err),
|
||||
);
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
_rowCache.onRowsChanged(
|
||||
|
@ -7,85 +7,96 @@ import 'package:appflowy_backend/protobuf/flowy-database2/sort_entities.pb.dart'
|
||||
import 'package:appflowy_backend/protobuf/flowy-database2/view_entities.pb.dart';
|
||||
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
|
||||
import 'package:appflowy_result/appflowy_result.dart';
|
||||
import 'package:flowy_infra/notifier.dart';
|
||||
|
||||
typedef RowsVisibilityNotifierValue
|
||||
= FlowyResult<RowsVisibilityChangePB, FlowyError>;
|
||||
|
||||
typedef NumberOfRowsNotifierValue = FlowyResult<RowsChangePB, FlowyError>;
|
||||
typedef ReorderAllRowsNotifierValue = FlowyResult<List<String>, FlowyError>;
|
||||
typedef SingleRowNotifierValue = FlowyResult<ReorderSingleRowPB, FlowyError>;
|
||||
typedef RowsVisibilityCallback = void Function(
|
||||
FlowyResult<RowsVisibilityChangePB, FlowyError>,
|
||||
);
|
||||
typedef NumberOfRowsCallback = void Function(
|
||||
FlowyResult<RowsChangePB, FlowyError>,
|
||||
);
|
||||
typedef ReorderAllRowsCallback = void Function(
|
||||
FlowyResult<List<String>, FlowyError>,
|
||||
);
|
||||
typedef SingleRowCallback = void Function(
|
||||
FlowyResult<ReorderSingleRowPB, FlowyError>,
|
||||
);
|
||||
|
||||
class DatabaseViewListener {
|
||||
DatabaseViewListener({required this.viewId});
|
||||
|
||||
final String viewId;
|
||||
|
||||
PublishNotifier<NumberOfRowsNotifierValue>? _rowsNotifier = PublishNotifier();
|
||||
PublishNotifier<ReorderAllRowsNotifierValue>? _reorderAllRows =
|
||||
PublishNotifier();
|
||||
PublishNotifier<SingleRowNotifierValue>? _reorderSingleRow =
|
||||
PublishNotifier();
|
||||
PublishNotifier<RowsVisibilityNotifierValue>? _rowsVisibility =
|
||||
PublishNotifier();
|
||||
|
||||
DatabaseNotificationListener? _listener;
|
||||
|
||||
void start({
|
||||
required void Function(NumberOfRowsNotifierValue) onRowsChanged,
|
||||
required void Function(ReorderAllRowsNotifierValue) onReorderAllRows,
|
||||
required void Function(SingleRowNotifierValue) onReorderSingleRow,
|
||||
required void Function(RowsVisibilityNotifierValue) onRowsVisibilityChanged,
|
||||
required NumberOfRowsCallback onRowsChanged,
|
||||
required ReorderAllRowsCallback onReorderAllRows,
|
||||
required SingleRowCallback onReorderSingleRow,
|
||||
required RowsVisibilityCallback onRowsVisibilityChanged,
|
||||
required void Function() onReloadRows,
|
||||
}) {
|
||||
if (_listener != null) {
|
||||
// Stop any existing listener
|
||||
_listener?.stop();
|
||||
}
|
||||
|
||||
// Initialize the notification listener
|
||||
_listener = DatabaseNotificationListener(
|
||||
objectId: viewId,
|
||||
handler: _handler,
|
||||
handler: (ty, result) => _handler(
|
||||
ty,
|
||||
result,
|
||||
onRowsChanged,
|
||||
onReorderAllRows,
|
||||
onReorderSingleRow,
|
||||
onRowsVisibilityChanged,
|
||||
onReloadRows,
|
||||
),
|
||||
);
|
||||
|
||||
_rowsNotifier?.addPublishListener(onRowsChanged);
|
||||
_rowsVisibility?.addPublishListener(onRowsVisibilityChanged);
|
||||
_reorderAllRows?.addPublishListener(onReorderAllRows);
|
||||
_reorderSingleRow?.addPublishListener(onReorderSingleRow);
|
||||
}
|
||||
|
||||
void _handler(
|
||||
DatabaseNotification ty,
|
||||
FlowyResult<Uint8List, FlowyError> result,
|
||||
NumberOfRowsCallback onRowsChanged,
|
||||
ReorderAllRowsCallback onReorderAllRows,
|
||||
SingleRowCallback onReorderSingleRow,
|
||||
RowsVisibilityCallback onRowsVisibilityChanged,
|
||||
void Function() onReloadRows,
|
||||
) {
|
||||
switch (ty) {
|
||||
case DatabaseNotification.DidUpdateViewRowsVisibility:
|
||||
result.fold(
|
||||
(payload) => _rowsVisibility?.value =
|
||||
(payload) => onRowsVisibilityChanged(
|
||||
FlowyResult.success(RowsVisibilityChangePB.fromBuffer(payload)),
|
||||
(error) => _rowsVisibility?.value = FlowyResult.failure(error),
|
||||
),
|
||||
(error) => onRowsVisibilityChanged(FlowyResult.failure(error)),
|
||||
);
|
||||
break;
|
||||
case DatabaseNotification.DidUpdateRow:
|
||||
result.fold(
|
||||
(payload) => _rowsNotifier?.value =
|
||||
(payload) => onRowsChanged(
|
||||
FlowyResult.success(RowsChangePB.fromBuffer(payload)),
|
||||
(error) => _rowsNotifier?.value = FlowyResult.failure(error),
|
||||
),
|
||||
(error) => onRowsChanged(FlowyResult.failure(error)),
|
||||
);
|
||||
break;
|
||||
case DatabaseNotification.DidReorderRows:
|
||||
result.fold(
|
||||
(payload) => _reorderAllRows?.value = FlowyResult.success(
|
||||
ReorderAllRowsPB.fromBuffer(payload).rowOrders,
|
||||
(payload) => onReorderAllRows(
|
||||
FlowyResult.success(ReorderAllRowsPB.fromBuffer(payload).rowOrders),
|
||||
),
|
||||
(error) => _reorderAllRows?.value = FlowyResult.failure(error),
|
||||
(error) => onReorderAllRows(FlowyResult.failure(error)),
|
||||
);
|
||||
break;
|
||||
case DatabaseNotification.DidReorderSingleRow:
|
||||
result.fold(
|
||||
(payload) => _reorderSingleRow?.value =
|
||||
(payload) => onReorderSingleRow(
|
||||
FlowyResult.success(ReorderSingleRowPB.fromBuffer(payload)),
|
||||
(error) => _reorderSingleRow?.value = FlowyResult.failure(error),
|
||||
),
|
||||
(error) => onReorderSingleRow(FlowyResult.failure(error)),
|
||||
);
|
||||
break;
|
||||
case DatabaseNotification.ReloadRows:
|
||||
onReloadRows();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -93,16 +104,6 @@ class DatabaseViewListener {
|
||||
|
||||
Future<void> stop() async {
|
||||
await _listener?.stop();
|
||||
_rowsVisibility?.dispose();
|
||||
_rowsVisibility = null;
|
||||
|
||||
_rowsNotifier?.dispose();
|
||||
_rowsNotifier = null;
|
||||
|
||||
_reorderAllRows?.dispose();
|
||||
_reorderAllRows = null;
|
||||
|
||||
_reorderSingleRow?.dispose();
|
||||
_reorderSingleRow = null;
|
||||
_listener = null;
|
||||
}
|
||||
}
|
||||
|
15
frontend/appflowy_tauri/src-tauri/Cargo.lock
generated
15
frontend/appflowy_tauri/src-tauri/Cargo.lock
generated
@ -963,7 +963,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -988,7 +988,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-database"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -1018,7 +1018,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-document"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -1038,7 +1038,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-entity"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -1057,7 +1057,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-folder"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -1100,7 +1100,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-plugins"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
@ -1180,7 +1180,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-user"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"collab",
|
||||
@ -2176,6 +2176,7 @@ dependencies = [
|
||||
"strum",
|
||||
"strum_macros 0.25.2",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
"tracing",
|
||||
"url",
|
||||
"validator",
|
||||
|
@ -116,13 +116,13 @@ 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 = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
|
||||
# Working directory: frontend
|
||||
# To update the commit ID, run:
|
||||
|
15
frontend/appflowy_web_app/src-tauri/Cargo.lock
generated
15
frontend/appflowy_web_app/src-tauri/Cargo.lock
generated
@ -946,7 +946,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -971,7 +971,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-database"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -1001,7 +1001,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-document"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -1021,7 +1021,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-entity"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -1040,7 +1040,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-folder"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -1083,7 +1083,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-plugins"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
@ -1163,7 +1163,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-user"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"collab",
|
||||
@ -2206,6 +2206,7 @@ dependencies = [
|
||||
"strum",
|
||||
"strum_macros 0.25.3",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
"tracing",
|
||||
"url",
|
||||
"validator",
|
||||
|
@ -116,13 +116,13 @@ 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 = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
|
||||
# Working directory: frontend
|
||||
# To update the commit ID, run:
|
||||
|
15
frontend/rust-lib/Cargo.lock
generated
15
frontend/rust-lib/Cargo.lock
generated
@ -824,7 +824,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -849,7 +849,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-database"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -879,7 +879,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-document"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -899,7 +899,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-entity"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
@ -918,7 +918,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-folder"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
@ -961,7 +961,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-plugins"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
@ -1041,7 +1041,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "collab-user"
|
||||
version = "0.2.0"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=0af7f361d52611842a862b982b2c72e4fa12cda1#0af7f361d52611842a862b982b2c72e4fa12cda1"
|
||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=2ba00c1e430f6157a2b6cbda89992d3b154ea6fb#2ba00c1e430f6157a2b6cbda89992d3b154ea6fb"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"collab",
|
||||
@ -2002,6 +2002,7 @@ dependencies = [
|
||||
"strum",
|
||||
"strum_macros 0.25.2",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
"tracing",
|
||||
"url",
|
||||
"validator",
|
||||
|
@ -136,13 +136,13 @@ 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 = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "0af7f361d52611842a862b982b2c72e4fa12cda1" }
|
||||
collab = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-entity = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-folder = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-document = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-database = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-plugins = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
collab-user = { version = "0.2", git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "2ba00c1e430f6157a2b6cbda89992d3b154ea6fb" }
|
||||
|
||||
# Working directory: frontend
|
||||
# To update the commit ID, run:
|
||||
|
@ -49,6 +49,7 @@ csv = "1.1.6"
|
||||
strum = "0.25"
|
||||
strum_macros = "0.25"
|
||||
validator = { workspace = true, features = ["derive"] }
|
||||
tokio-util.workspace = true
|
||||
|
||||
[dev-dependencies]
|
||||
event-integration-test = { path = "../event-integration-test", default-features = false }
|
||||
|
@ -68,6 +68,12 @@ pub struct RowMetaPB {
|
||||
pub is_document_empty: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, ProtoBuf)]
|
||||
pub struct RepeatedRowMetaPB {
|
||||
#[pb(index = 1)]
|
||||
pub items: Vec<RowMetaPB>,
|
||||
}
|
||||
|
||||
impl std::convert::From<&RowDetail> for RowMetaPB {
|
||||
fn from(row_detail: &RowDetail) -> Self {
|
||||
Self {
|
||||
@ -213,18 +219,6 @@ pub struct OptionalRowPB {
|
||||
pub row: Option<RowPB>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, ProtoBuf)]
|
||||
pub struct RepeatedRowPB {
|
||||
#[pb(index = 1)]
|
||||
pub items: Vec<RowPB>,
|
||||
}
|
||||
|
||||
impl std::convert::From<Vec<RowPB>> for RepeatedRowPB {
|
||||
fn from(items: Vec<RowPB>) -> Self {
|
||||
Self { items }
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default, ProtoBuf)]
|
||||
pub struct InsertedRowPB {
|
||||
#[pb(index = 1)]
|
||||
|
@ -47,6 +47,20 @@ pub(crate) async fn get_database_data_handler(
|
||||
data_result_ok(data)
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "trace", skip_all, err)]
|
||||
pub(crate) async fn get_all_rows_handler(
|
||||
data: AFPluginData<DatabaseViewIdPB>,
|
||||
manager: AFPluginState<Weak<DatabaseManager>>,
|
||||
) -> DataResult<RepeatedRowMetaPB, FlowyError> {
|
||||
let manager = upgrade_manager(manager)?;
|
||||
let view_id: DatabaseViewIdPB = data.into_inner();
|
||||
let database_id = manager
|
||||
.get_database_id_with_view_id(view_id.as_ref())
|
||||
.await?;
|
||||
let database_editor = manager.get_database_editor(&database_id).await?;
|
||||
let data = database_editor.get_all_rows(view_id.as_ref()).await?;
|
||||
data_result_ok(data)
|
||||
}
|
||||
#[tracing::instrument(level = "trace", skip_all, err)]
|
||||
pub(crate) async fn open_database_handler(
|
||||
data: AFPluginData<DatabaseViewIdPB>,
|
||||
|
@ -14,6 +14,7 @@ pub fn init(database_manager: Weak<DatabaseManager>) -> AFPlugin {
|
||||
.state(database_manager);
|
||||
plugin
|
||||
.event(DatabaseEvent::GetDatabase, get_database_data_handler)
|
||||
.event(DatabaseEvent::GetAllRows, get_all_rows_handler)
|
||||
.event(DatabaseEvent::GetDatabaseData, get_database_data_handler)
|
||||
.event(DatabaseEvent::GetDatabaseId, get_database_id_handler)
|
||||
.event(DatabaseEvent::GetDatabaseSetting, get_database_setting_handler)
|
||||
@ -381,4 +382,7 @@ pub enum DatabaseEvent {
|
||||
|
||||
#[event(input = "RowIdPB")]
|
||||
InitRow = 176,
|
||||
|
||||
#[event(input = "DatabaseViewIdPB", output = "RepeatedRowMetaPB")]
|
||||
GetAllRows = 177,
|
||||
}
|
||||
|
@ -290,15 +290,14 @@ impl DatabaseManager {
|
||||
.await
|
||||
.ok_or_else(|| FlowyError::collab_not_sync().with_context("open database error"))?;
|
||||
|
||||
let editor = Arc::new(
|
||||
DatabaseEditor::new(
|
||||
let editor = DatabaseEditor::new(
|
||||
self.user.clone(),
|
||||
database,
|
||||
self.task_scheduler.clone(),
|
||||
self.collab_builder.clone(),
|
||||
)
|
||||
.await?,
|
||||
);
|
||||
.await?;
|
||||
|
||||
self
|
||||
.editors
|
||||
.lock()
|
||||
|
@ -52,6 +52,7 @@ pub enum DatabaseNotification {
|
||||
DidUpdateFieldSettings = 86,
|
||||
// Trigger when Calculation changed
|
||||
DidUpdateCalculation = 87,
|
||||
ReloadRows = 88,
|
||||
}
|
||||
|
||||
impl std::convert::From<DatabaseNotification> for i32 {
|
||||
|
@ -43,7 +43,7 @@ use tracing::{debug, error, event, instrument, trace, warn};
|
||||
pub struct DatabaseEditor {
|
||||
pub(crate) database: Arc<RwLock<Database>>,
|
||||
pub cell_cache: CellCache,
|
||||
database_views: Arc<DatabaseViews>,
|
||||
pub(crate) database_views: Arc<DatabaseViews>,
|
||||
#[allow(dead_code)]
|
||||
/// Used to send notification to the frontend.
|
||||
notification_sender: Arc<DebounceNotificationSender>,
|
||||
@ -57,7 +57,7 @@ impl DatabaseEditor {
|
||||
database: Arc<RwLock<Database>>,
|
||||
task_scheduler: Arc<RwLock<TaskDispatcher>>,
|
||||
collab_builder: Arc<AppFlowyCollabBuilder>,
|
||||
) -> FlowyResult<Self> {
|
||||
) -> FlowyResult<Arc<Self>> {
|
||||
let notification_sender = Arc::new(DebounceNotificationSender::new(200));
|
||||
let cell_cache = AnyTypeCache::<u64>::new();
|
||||
let database_id = database.read().await.get_database_id();
|
||||
@ -66,7 +66,6 @@ impl DatabaseEditor {
|
||||
// observe_view_change(&database_id, &database).await;
|
||||
// observe_field_change(&database_id, &database).await;
|
||||
observe_rows_change(&database_id, &database, ¬ification_sender).await;
|
||||
observe_block_event(&database_id, &database).await;
|
||||
|
||||
// Used to cache the view of the database for fast access.
|
||||
let editor_by_view_id = Arc::new(RwLock::new(EditorByViewId::default()));
|
||||
@ -99,15 +98,16 @@ impl DatabaseEditor {
|
||||
CollabBuilderConfig::default(),
|
||||
database.clone(),
|
||||
)?;
|
||||
|
||||
Ok(Self {
|
||||
let this = Arc::new(Self {
|
||||
user,
|
||||
database,
|
||||
cell_cache,
|
||||
database_views,
|
||||
notification_sender,
|
||||
collab_builder,
|
||||
})
|
||||
});
|
||||
observe_block_event(&database_id, &this).await;
|
||||
Ok(this)
|
||||
}
|
||||
|
||||
pub async fn close_view(&self, view_id: &str) {
|
||||
@ -1299,7 +1299,7 @@ impl DatabaseEditor {
|
||||
.await
|
||||
.ok_or_else(FlowyError::record_not_found)?;
|
||||
|
||||
let row_orders = self.database.read().await.get_row_orders_for_view(&view_id);
|
||||
let row_details = database_view.v_get_row_details().await;
|
||||
let (database_id, fields, is_linked) = {
|
||||
let database = self.database.read().await;
|
||||
let database_id = database.get_database_id();
|
||||
@ -1312,15 +1312,9 @@ impl DatabaseEditor {
|
||||
(database_id, fields, is_linked)
|
||||
};
|
||||
|
||||
let rows = row_orders
|
||||
let rows = row_details
|
||||
.into_iter()
|
||||
.map(|row_order| RowMetaPB {
|
||||
id: row_order.id.to_string(),
|
||||
document_id: "".to_string(),
|
||||
icon: None,
|
||||
cover: None,
|
||||
is_document_empty: false,
|
||||
})
|
||||
.map(|detail| RowMetaPB::from(detail.as_ref()))
|
||||
.collect::<Vec<RowMetaPB>>();
|
||||
Ok(DatabasePB {
|
||||
id: database_id,
|
||||
@ -1331,6 +1325,16 @@ impl DatabaseEditor {
|
||||
})
|
||||
}
|
||||
|
||||
pub async fn get_all_rows(&self, view_id: &str) -> FlowyResult<RepeatedRowMetaPB> {
|
||||
let database_view = self.database_views.get_view_editor(view_id).await?;
|
||||
let row_details = database_view.v_get_row_details().await;
|
||||
let rows = row_details
|
||||
.into_iter()
|
||||
.map(|detail| RowMetaPB::from(detail.as_ref()))
|
||||
.collect::<Vec<RowMetaPB>>();
|
||||
Ok(RepeatedRowMetaPB { items: rows })
|
||||
}
|
||||
|
||||
pub async fn export_csv(&self, style: CSVFormat) -> FlowyResult<String> {
|
||||
let database = self.database.clone();
|
||||
let database_guard = database.read().await;
|
||||
|
@ -1,6 +1,6 @@
|
||||
use crate::entities::{DatabaseSyncStatePB, DidFetchRowPB, RowsChangePB};
|
||||
use crate::notification::{send_notification, DatabaseNotification, DATABASE_OBSERVABLE_SOURCE};
|
||||
use crate::services::database::UpdatedRow;
|
||||
use crate::services::database::{DatabaseEditor, UpdatedRow};
|
||||
use collab_database::blocks::BlockEvent;
|
||||
use collab_database::database::Database;
|
||||
use collab_database::fields::FieldChange;
|
||||
@ -10,7 +10,9 @@ use flowy_notification::{DebounceNotificationSender, NotificationBuilder};
|
||||
use futures::StreamExt;
|
||||
use lib_dispatch::prelude::af_spawn;
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
use tokio::sync::RwLock;
|
||||
use tokio_util::sync::CancellationToken;
|
||||
use tracing::{trace, warn};
|
||||
|
||||
pub(crate) async fn observe_sync_state(database_id: &str, database: &Arc<RwLock<Database>>) {
|
||||
@ -136,13 +138,18 @@ pub(crate) async fn observe_view_change(database_id: &str, database: &Arc<RwLock
|
||||
});
|
||||
}
|
||||
|
||||
pub(crate) async fn observe_block_event(database_id: &str, database: &Arc<RwLock<Database>>) {
|
||||
pub(crate) async fn observe_block_event(database_id: &str, database_editor: &Arc<DatabaseEditor>) {
|
||||
let database_id = database_id.to_string();
|
||||
let weak_database = Arc::downgrade(database);
|
||||
let mut block_event_rx = database.read().await.subscribe_block_event();
|
||||
let mut block_event_rx = database_editor
|
||||
.database
|
||||
.read()
|
||||
.await
|
||||
.subscribe_block_event();
|
||||
let database_editor = Arc::downgrade(database_editor);
|
||||
af_spawn(async move {
|
||||
let token = CancellationToken::new();
|
||||
while let Ok(event) = block_event_rx.recv().await {
|
||||
if weak_database.upgrade().is_none() {
|
||||
if database_editor.upgrade().is_none() {
|
||||
break;
|
||||
}
|
||||
|
||||
@ -155,12 +162,31 @@ pub(crate) async fn observe_block_event(database_id: &str, database: &Arc<RwLock
|
||||
BlockEvent::DidFetchRow(row_details) => {
|
||||
for row_detail in row_details {
|
||||
trace!("Did fetch row: {:?}", row_detail.row.id);
|
||||
|
||||
let row_id = row_detail.row.id.clone();
|
||||
let pb = DidFetchRowPB::from(row_detail);
|
||||
send_notification(&row_id, DatabaseNotification::DidFetchRow)
|
||||
.payload(pb)
|
||||
.send();
|
||||
}
|
||||
|
||||
let cloned_token = token.clone();
|
||||
let cloned_database_editor = database_editor.clone();
|
||||
tokio::spawn(async move {
|
||||
tokio::time::sleep(Duration::from_secs(2)).await;
|
||||
if cloned_token.is_cancelled() {
|
||||
return;
|
||||
}
|
||||
if let Some(database_editor) = cloned_database_editor.upgrade() {
|
||||
for view_editor in database_editor.database_views.editors().await {
|
||||
send_notification(
|
||||
&view_editor.view_id.clone(),
|
||||
DatabaseNotification::ReloadRows,
|
||||
)
|
||||
.send();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -293,12 +293,10 @@ impl DatabaseViewEditor {
|
||||
|
||||
// Each row update will trigger a calculations, filter and sort operation. We don't want
|
||||
// to block the main thread, so we spawn a new task to do the work.
|
||||
if let Some(field_id) = field_id {
|
||||
self
|
||||
.gen_did_update_row_view_tasks(row_detail.row.id.clone(), field_id)
|
||||
.await;
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn v_filter_rows(&self, row_details: &mut Vec<Arc<RowDetail>>) {
|
||||
self.filter_controller.filter_rows(row_details).await
|
||||
@ -682,7 +680,6 @@ impl DatabaseViewEditor {
|
||||
#[tracing::instrument(level = "trace", skip(self), err)]
|
||||
pub async fn v_modify_filters(&self, changeset: FilterChangeset) -> FlowyResult<()> {
|
||||
let notification = self.filter_controller.apply_changeset(changeset).await;
|
||||
|
||||
notify_did_update_filter(notification).await;
|
||||
|
||||
let group_controller_read_guard = self.group_controller.read().await;
|
||||
@ -1100,7 +1097,7 @@ impl DatabaseViewEditor {
|
||||
}
|
||||
}
|
||||
|
||||
async fn gen_did_update_row_view_tasks(&self, row_id: RowId, field_id: String) {
|
||||
async fn gen_did_update_row_view_tasks(&self, row_id: RowId, field_id: Option<String>) {
|
||||
let weak_filter_controller = Arc::downgrade(&self.filter_controller);
|
||||
let weak_sort_controller = Arc::downgrade(&self.sort_controller);
|
||||
let weak_calculations_controller = Arc::downgrade(&self.calculations_controller);
|
||||
@ -1117,11 +1114,14 @@ impl DatabaseViewEditor {
|
||||
.did_receive_row_changed(row_id.clone())
|
||||
.await;
|
||||
}
|
||||
|
||||
if let Some(calculations_controller) = weak_calculations_controller.upgrade() {
|
||||
if let Some(field_id) = field_id {
|
||||
calculations_controller
|
||||
.did_receive_cell_changed(field_id)
|
||||
.await;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -7,11 +7,11 @@ use collab_database::database::gen_database_filter_id;
|
||||
use collab_database::fields::Field;
|
||||
use collab_database::rows::{Cell, Cells, Row, RowDetail, RowId};
|
||||
use dashmap::DashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use tokio::sync::RwLock;
|
||||
|
||||
use flowy_error::FlowyResult;
|
||||
use lib_infra::priority_task::{QualityOfService, Task, TaskContent, TaskDispatcher};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use tokio::sync::RwLock;
|
||||
use tracing::error;
|
||||
|
||||
use crate::entities::filter_entities::*;
|
||||
use crate::entities::{FieldType, InsertedRowPB, RowMetaPB};
|
||||
@ -185,8 +185,9 @@ impl FilterController {
|
||||
.iter_mut()
|
||||
.find_map(|filter| filter.find_filter(&parent_filter_id))
|
||||
{
|
||||
// TODO(RS): error handling for inserting filters
|
||||
let _result = parent_filter.insert_filter(new_filter);
|
||||
if let Err(err) = parent_filter.insert_filter(new_filter) {
|
||||
error!("error while inserting filter: {}", err);
|
||||
}
|
||||
}
|
||||
},
|
||||
None => {
|
||||
@ -214,7 +215,9 @@ impl FilterController {
|
||||
.find_map(|filter| filter.find_filter(&filter_id))
|
||||
{
|
||||
// TODO(RS): error handling for updating filter data
|
||||
let _result = filter.update_filter_data(data);
|
||||
if let Err(error) = filter.update_filter_data(data) {
|
||||
error!("error while updating filter data: {}", error);
|
||||
}
|
||||
}
|
||||
},
|
||||
FilterChangeset::Delete {
|
||||
|
Loading…
Reference in New Issue
Block a user