onBrowse method

  1. @override
Stream<AlbumOre> onBrowse(
  1. String path, [
  2. Query? query,
  3. dynamic parent
])
override

Implementation

@override
Stream<AlbumOre> onBrowse(path, [query, parent]) async* {
  const r = FirestoreCodec.decode; // decoder
  final s = [#pageSize, #pageToken, #orderBy]; //.*
  x(data) => data..[Album.srcKey] = data['name'];

  final uri = accessUri.resolve(resolvePath(path)).replace(
        queryParameters: Query.splice(query, s)?.json,
        scheme: 'https', // designate framework.*
      );

  final response = await client.get(uri);
  final body = json.decode(response.body, reviver: r);

  if (response.statusCode != 200) {
    throw FirestoreException(response);
  }

  // yield single model
  if (!body.containsKey('documents')) {
    yield AlbumOre(x(body));
    return;
  }

  // yield multiple models % no token
  AlbumOre ore = AlbumOre(
    body['documents'].map(x).toList(), // *............*
    body['nextPageToken'], // *........................*
  );
  yield (parent as AlbumOre? ?? AlbumOre([])) + ore;

  // yield multiple models % next token
  if (ore.nextPageToken != null) {
    yield* onBrowse(
      path, // *.......................................*
      (query ?? Queries).pageToken(ore.nextPageToken!),
      (parent ?? AlbumOre([])) + ore, // *.............*
    );
  }
}