share_bloc.dart 1.9 KB

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