share_bloc.dart 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import 'package:app_flowy/workspace/domain/i_share.dart';
  2. import 'package:flowy_sdk/protobuf/flowy-workspace-infra/export.pb.dart';
  3. import 'package:flowy_sdk/protobuf/flowy-workspace-infra/view_create.pb.dart';
  4. import 'package:flowy_sdk/protobuf/flowy-workspace/errors.pb.dart';
  5. import 'package:freezed_annotation/freezed_annotation.dart';
  6. import 'package:flutter_bloc/flutter_bloc.dart';
  7. import 'package:dartz/dartz.dart';
  8. part 'share_bloc.freezed.dart';
  9. class DocShareBloc extends Bloc<DocShareEvent, DocShareState> {
  10. IShare shareManager;
  11. View view;
  12. DocShareBloc({required this.view, required this.shareManager}) : super(const DocShareState.initial()) {
  13. on<DocShareEvent>((event, emit) async {
  14. await event.map(
  15. shareMarkdown: (ShareMarkdown value) async {
  16. await shareManager.exportMarkdown(view.id).then((result) {
  17. result.fold(
  18. (value) => emit(DocShareState.finish(left(value))),
  19. (error) => emit(DocShareState.finish(right(error))),
  20. );
  21. });
  22. emit(const DocShareState.loading());
  23. },
  24. shareLink: (ShareLink value) {},
  25. shareText: (ShareText value) {},
  26. );
  27. });
  28. }
  29. }
  30. @freezed
  31. class DocShareEvent with _$DocShareEvent {
  32. const factory DocShareEvent.shareMarkdown() = ShareMarkdown;
  33. const factory DocShareEvent.shareText() = ShareText;
  34. const factory DocShareEvent.shareLink() = ShareLink;
  35. }
  36. @freezed
  37. class DocShareState with _$DocShareState {
  38. const factory DocShareState.initial() = _Initial;
  39. const factory DocShareState.loading() = _Loading;
  40. const factory DocShareState.finish(Either<ExportData, WorkspaceError> successOrFail) = _Finish;
  41. }