streamCollection method

StreamController<List> streamCollection(
  1. String collectionId, {
  2. StreamAction action = StreamAction.all,
  3. List<Filter> filters = const [],
  4. int page = 0,
  5. int limit = 20,
  6. bool showDrafts = false,
})

Stream a single collection with its docs only

Implementation

StreamController<List<dynamic>> streamCollection(
  final String collectionId, {
  final StreamAction action = StreamAction.all,
  final List<Filter> filters = const [],
  final int page = 0,
  final int limit = 20,
  final bool showDrafts = false,
}) {
  late final StreamController<List<dynamic>> streamController;
  streamController = StreamController<List<dynamic>>.broadcast(
    onCancel: () {
      if (!streamController.hasListener) {
        streamController.close();
      }
    },
  );
  try {
    TetaCMS.instance.analytics.insertEvent(
      TetaAnalyticsType.streamCollection,
      'Teta CMS: realtime request',
      <String, dynamic>{},
      isUserIdPreferableIfExists: true,
    );
  } catch (e) {
    TetaCMS.printError(
      'Error inserting a new event in Teta Analytics, error: $e',
    );
  }
  TetaCMS.I.db
      .fromId(collectionId)
      .get(
        filters: filters,
        limit: limit,
        page: page,
        showDrafts: showDrafts,
      )
      .then(
    (final e) {
      TetaCMS.printWarning('${e.error}, ${e.data}');
      if (e.error == null) {
        streamController.add(e.data!);
      }
    },
  );
  on(
    collectionId: collectionId,
    callback: (final e) async {
      try {
        unawaited(
          TetaCMS.instance.analytics.insertEvent(
            TetaAnalyticsType.streamCollection,
            'Teta CMS: realtime request',
            <String, dynamic>{},
            isUserIdPreferableIfExists: true,
          ),
        );
      } catch (e) {
        TetaCMS.printError(
          'Error inserting a new event in Teta Analytics, error: $e',
        );
      }
      final resp = await TetaCMS.I.db.fromId(collectionId).get(
            filters: filters,
            limit: limit,
            page: page,
            showDrafts: showDrafts,
          );
      if (resp.error == null) {
        streamController.add(resp.data!);
      }
    },
  );
  return streamController;
}