streamCollection method
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;
}