apply method

void apply(
  1. Map<String, Object?> frame, {
  2. QueryClient? query,
})

Applies one raw frame and optionally hydrates query.

Implementation

void apply(Map<String, Object?> frame, {QueryClient? query}) {
  switch (frame['type']) {
    case 'initial':
      _applyInitial(Map<String, Object?>.from(frame['data']! as Map), query);
    case 'query':
      if (query != null) {
        _hydrateQuery(
          query,
          Map<String, Object?>.from(frame['query']! as Map),
        );
      }
    case 'queryError':
      if (query != null) {
        if (frame['query'] case final Map queryState) {
          _hydrateQuery(query, Map<String, Object?>.from(queryState));
        }
      }
    default:
      if (frame.containsKey('loads') && frame.containsKey('location')) {
        _applyInitial(frame, query);
        return;
      }
      throw FormatException('Unknown handoff frame: ${frame['type']}');
  }
}