1+ import 'package:appflowy/core/notification/folder_notification.dart' ;
12import 'package:appflowy/features/share_tab/data/models/models.dart' ;
23import 'package:appflowy/features/share_tab/data/repositories/share_with_user_repository.dart' ;
34import 'package:appflowy/features/share_tab/logic/share_tab_event.dart' ;
45import 'package:appflowy/features/share_tab/logic/share_tab_state.dart' ;
6+ import 'package:appflowy/features/util/extensions.dart' ;
57import 'package:appflowy/plugins/document/presentation/editor_plugins/copy_and_paste/clipboard_service.dart' ;
68import 'package:appflowy/plugins/shared/share/constants.dart' ;
79import 'package:appflowy/shared/feature_flags.dart' ;
810import 'package:appflowy/startup/startup.dart' ;
11+ import 'package:appflowy_backend/log.dart' ;
12+ import 'package:appflowy_backend/protobuf/flowy-folder/protobuf.dart' ;
913import 'package:appflowy_result/appflowy_result.dart' ;
1014import '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}
0 commit comments