Added

Changed

To make this easier, types that conform to a fragment's Key protocol now also generate asFragment() methods to create the FragmentNext or PaginationFragmentNext to pass on to a child view. Using this lets you avoid writing initializers for fragment views in many cases.

// Before:

struct MoviesTab: View {
  @QueryNext(MoviesTabQuery.self) var movies

	var body: some View {
		switch movies.get() {
		// ...
		case .success(let data):
			if let data = data {
				MoviesList(films: data) // MoviesTabQuery.Data conforms to MoviesList_films_Key
			}
		}
	}
}

struct MoviesList: View {
  @PaginationFragmentNext(MoviesList_films.self) var films

	init(films: MoviesList_films_Key) {
		$films = films
	}

	var body: some View { /* ... */ }
}

// After:

struct MoviesTab: View {
  @QueryNext<MoviesTabQuery> var movies

	var body: some View {
		switch movies.get() {
		// ...
		case .success(let data):
			if let data = data {
				// Use asFragment() to create the PaginationFragmentNext that
				// MoviesList expects.
				MoviesList(films: data.asFragment())
			}
		}
	}
}

struct MoviesList: View {
  @PaginationFragmentNext<MoviesList_films> var films

	// The default initializer is fine now because the parent view is passing
	// a PaginationFragmentNext instead of a fragment key.

	var body: some View { /* ... */ }
}

Fixed