notifySubscriptionsWithLocalData<_Model extends OfflineFirstWithGraphqlModel> method

  1. @protected
  2. @visibleForTesting
Future<void> notifySubscriptionsWithLocalData<_Model extends OfflineFirstWithGraphqlModel>({
  1. bool notifyWhenEmpty = true,
})

Iterate through subscriptions after an upsert and notify any subscribe listeners.

Implementation

@protected
@visibleForTesting
Future<void> notifySubscriptionsWithLocalData<_Model extends OfflineFirstWithGraphqlModel>(
    {bool notifyWhenEmpty = true}) async {
  final queriesControllers = subscriptions[_Model]?.entries;
  if (queriesControllers?.isEmpty ?? true) return;

  for (final queryController in queriesControllers!) {
    final query = queryController.key;
    final controller = queryController.value;
    if (controller.isClosed || controller.isPaused) continue;

    if (query == null || memoryCacheProvider.canFind<_Model>(query)) {
      final results = memoryCacheProvider.get<_Model>(query: query);
      if (!controller.isClosed && (results?.isNotEmpty ?? false)) controller.add(results!);
    }

    final existsInSqlite = await sqliteProvider.exists<_Model>(query: query, repository: this);
    if (existsInSqlite) {
      final results = await sqliteProvider.get<_Model>(query: query, repository: this);
      if (!controller.isClosed) controller.add(results);
    } else if (notifyWhenEmpty) {
      if (!controller.isClosed) controller.add(<_Model>[]);
    }
  }
}