import 'package:appflowy_backend/dispatch/dispatch.dart'; import 'package:appflowy_backend/protobuf/flowy-document2/entities.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart'; import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart'; import 'package:dartz/dartz.dart'; class DocumentService { // unused now. Future> createDocument({ required ViewPB view, }) async { final canOpen = await openDocument(viewId: view.id); if (canOpen.isRight()) { return const Right(unit); } final payload = CreateDocumentPayloadPB()..documentId = view.id; final result = await DocumentEventCreateDocument(payload).send(); return result.swap(); } Future> openDocument({ required String viewId, }) async { final payload = OpenDocumentPayloadPB()..documentId = viewId; final result = await DocumentEventOpenDocument(payload).send(); return result.swap(); } Future> getBlockFromDocument({ required DocumentDataPB document, required String blockId, }) async { final block = document.blocks[blockId]; if (block != null) { return right(block); } return left( FlowyError( msg: 'Block($blockId) not found in Document(${document.pageId})', ), ); } Future> closeDocument({ required ViewPB view, }) async { final payload = CloseDocumentPayloadPB()..documentId = view.id; final result = await DocumentEventCloseDocument(payload).send(); return result.swap(); } Future> applyAction({ required String documentId, required Iterable actions, }) async { final payload = ApplyActionPayloadPB( documentId: documentId, actions: actions, ); final result = await DocumentEventApplyAction(payload).send(); return result.swap(); } /// Creates a new external text. /// /// Normally, it's used to the block that needs sync long text. /// /// the delta parameter is the json representation of the delta. Future> createExternalText({ required String documentId, required String textId, String? delta, }) async { final payload = TextDeltaPayloadPB( documentId: documentId, textId: textId, delta: delta, ); final result = await DocumentEventCreateText(payload).send(); return result.swap(); } /// Updates the external text. /// /// this function is compatible with the [createExternalText] function. /// /// the delta parameter is the json representation of the delta too. Future> updateExternalText({ required String documentId, required String textId, String? delta, }) async { final payload = TextDeltaPayloadPB( documentId: documentId, textId: textId, delta: delta, ); final result = await DocumentEventApplyTextDeltaEvent(payload).send(); return result.swap(); } }