deleteDocument property

MutationSignal<({bool deleted, DeskDocument? newDefault}), String> deleteDocument
latefinal

Implementation

late final deleteDocument =
    mutationSignal<({bool deleted, DeskDocument? newDefault}), String>((
      documentId,
    ) async {
      final docTypeName = currentDocumentType.value?.name ?? '';

      // Snapshot whether this doc is currently the default
      final snapshot = untracked(() => documentsContainer(docTypeName).value);
      final wasDefault = snapshot.map(
        data: (d) =>
            d.documents.any((doc) => doc.id == documentId && doc.isDefault),
        loading: () => false,
        error: (_, _) => false,
      );

      final result = await dataSource.deleteDocument(documentId);
      if (!result) return (deleted: false, newDefault: null);

      if (selectedDocumentId.value == documentId) {
        selectedDocumentId.value = null;
        selectedVersionId.value = null;
      }
      await documentsContainer(docTypeName).awaitableReload();

      if (wasDefault) {
        final refreshed = untracked(
          () => documentsContainer(docTypeName).value,
        );
        final newDefault = refreshed.map(
          data: (d) => d.documents.firstWhereOrNull((doc) => doc.isDefault),
          loading: () => null,
          error: (_, _) => null,
        );
        return (deleted: true, newDefault: newDefault);
      }

      return (deleted: true, newDefault: null);
    }, debugLabel: 'deleteDocument');