Skip to content

Commit d250d75

Browse files
committed
feat: integrate shared user notification
1 parent 9e4ffd4 commit d250d75

File tree

3 files changed

+66
-1
lines changed

3 files changed

+66
-1
lines changed

frontend/appflowy_flutter/lib/features/share_tab/logic/share_tab_bloc.dart

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1+
import 'package:appflowy/core/notification/folder_notification.dart';
12
import 'package:appflowy/features/share_tab/data/models/models.dart';
23
import 'package:appflowy/features/share_tab/data/repositories/share_with_user_repository.dart';
34
import 'package:appflowy/features/share_tab/logic/share_tab_event.dart';
45
import 'package:appflowy/features/share_tab/logic/share_tab_state.dart';
6+
import 'package:appflowy/features/util/extensions.dart';
57
import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/clipboard_service.dart';
68
import 'package:appflowy/plugins/shared/share/constants.dart';
79
import 'package:appflowy/shared/feature_flags.dart';
810
import 'package:appflowy/startup/startup.dart';
11+
import 'package:appflowy_backend/log.dart';
12+
import 'package:appflowy_backend/protobuf/flowy-folder/protobuf.dart';
913
import 'package:appflowy_result/appflowy_result.dart';
1014
import 'package:bloc/bloc.dart';
1115

@@ -28,12 +32,22 @@ class ShareTabBloc extends Bloc<ShareTabEvent, ShareTabState> {
2832
on<ShareTabEventSearchAvailableUsers>(_onSearchAvailableUsers);
2933
on<ShareTabEventConvertToMember>(_onTurnIntoMember);
3034
on<ShareTabEventClearState>(_onClearState);
35+
on<ShareTabEventUpdateSharedUsers>(_onUpdateSharedUsers);
3136
}
3237

3338
final ShareWithUserRepository repository;
3439
final String workspaceId;
3540
final String pageId;
3641

42+
// Used to listen for shared view updates.
43+
late final FolderNotificationListener _folderNotificationListener;
44+
45+
@override
46+
Future<void> close() async {
47+
await _folderNotificationListener.stop();
48+
await super.close();
49+
}
50+
3751
Future<void> _onInitial(
3852
ShareTabEventInitialize event,
3953
Emitter<ShareTabState> emit,
@@ -49,6 +63,8 @@ class ShareTabBloc extends Bloc<ShareTabEvent, ShareTabState> {
4963
return;
5064
}
5165

66+
_initFolderNotificationListener();
67+
5268
final result = await repository.getCurrentUserProfile();
5369
final currentUser = result.fold(
5470
(user) => user,
@@ -343,4 +359,41 @@ class ShareTabBloc extends Bloc<ShareTabEvent, ShareTabState> {
343359
),
344360
);
345361
}
362+
363+
void _onUpdateSharedUsers(
364+
ShareTabEventUpdateSharedUsers event,
365+
Emitter<ShareTabState> emit,
366+
) {
367+
emit(
368+
state.copyWith(
369+
users: event.users,
370+
),
371+
);
372+
}
373+
374+
void _initFolderNotificationListener() {
375+
_folderNotificationListener = FolderNotificationListener(
376+
objectId: pageId,
377+
handler: (notification, result) {
378+
if (notification == FolderNotification.DidUpdateSharedUsers) {
379+
final response = result.fold(
380+
(payload) {
381+
final repeatedSharedUsers =
382+
RepeatedSharedUserPB.fromBuffer(payload);
383+
return repeatedSharedUsers;
384+
},
385+
(error) => null,
386+
);
387+
Log.debug('update shared users: $response');
388+
if (response != null) {
389+
add(
390+
ShareTabEvent.updateSharedUsers(
391+
users: response.sharedUsers,
392+
),
393+
);
394+
}
395+
}
396+
},
397+
);
398+
}
346399
}

frontend/appflowy_flutter/lib/features/share_tab/logic/share_tab_event.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ sealed class ShareTabEvent {
5050
ShareTabEventConvertToMember(email: email);
5151

5252
factory ShareTabEvent.clearState() => const ShareTabEventClearState();
53+
54+
factory ShareTabEvent.updateSharedUsers({
55+
required SharedUsers users,
56+
}) =>
57+
ShareTabEventUpdateSharedUsers(users: users);
5358
}
5459

5560
/// Initializes the share tab bloc.
@@ -132,3 +137,11 @@ class ShareTabEventConvertToMember extends ShareTabEvent {
132137
class ShareTabEventClearState extends ShareTabEvent {
133138
const ShareTabEventClearState();
134139
}
140+
141+
class ShareTabEventUpdateSharedUsers extends ShareTabEvent {
142+
const ShareTabEventUpdateSharedUsers({
143+
required this.users,
144+
});
145+
146+
final SharedUsers users;
147+
}

frontend/rust-lib/flowy-folder/src/manager.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1396,7 +1396,6 @@ impl FolderManager {
13961396
.share_page_with_user(&workspace_id, params)
13971397
.await?;
13981398

1399-
// If successful, refresh the shared page details from cloud and update local database
14001399
let cloud_workspace_id = workspace_id;
14011400
let cloud_page_id = view_id;
14021401
let user = self.user.clone();

0 commit comments

Comments
 (0)