File tree Expand file tree Collapse file tree 2 files changed +64
-2
lines changed
examples/next/template-hierarchy/example-app/src Expand file tree Collapse file tree 2 files changed +64
-2
lines changed Original file line number Diff line number Diff line change 1+ import { client , fetchAllPaginated } from "./client" ;
2+
3+ export async function fetchQueries ( { queries, context, props } ) {
4+ if ( ! queries || queries . length === 0 ) {
5+ console . error ( "No queries provided" ) ;
6+ return { } ;
7+ }
8+
9+ let queryPromises = [ ] ;
10+
11+ for ( const query of queries ) {
12+ if ( ! query . query ) {
13+ console . error ( "Query is undefined" ) ;
14+ continue ;
15+ }
16+
17+ const queryName = query . name || query . query . definitions [ 0 ] . name ?. value ;
18+
19+ if ( ! queryName ) {
20+ console . error ( "Query name is undefined, skipping query" ) ;
21+ continue ;
22+ }
23+
24+ const queryVariables = query . variables
25+ ? query . variables ( context , props )
26+ : { } ;
27+
28+ const queryResp = client . query ( query . query , queryVariables ) ;
29+
30+ queryPromises . push (
31+ queryResp . then ( ( response ) => ( {
32+ name : queryName ,
33+ response,
34+ } ) )
35+ ) ;
36+ }
37+
38+ const allSettledQueries = await Promise . all ( queryPromises ) ;
39+
40+ const allResponses = { } ;
41+
42+ for ( const { name, response } of allSettledQueries ) {
43+ allResponses [ name ] = response ;
44+ }
45+
46+ return allResponses ;
47+ }
Original file line number Diff line number Diff line change 11import { uriToTemplate } from "@/lib/templateHierarchy" ;
22import { RouteDataProvider } from "@/lib/context" ;
33import availableTemplates from "@/wp-templates" ;
4+ import { fetchQueries } from "@/lib/queryHandler" ;
45
56export default function Page ( props ) {
67 const { templateData } = props ;
@@ -14,7 +15,8 @@ export default function Page(props) {
1415 ) ;
1516}
1617
17- export async function getServerSideProps ( { params } ) {
18+ export async function getServerSideProps ( context ) {
19+ const { params } = context ;
1820 const uri = Array . isArray ( params . uri )
1921 ? "/" + params . uri ?. join ( "/" ) + "/"
2022 : "/" ;
@@ -30,12 +32,25 @@ export async function getServerSideProps({ params }) {
3032 } ;
3133 }
3234
35+ const PageTemplate = availableTemplates [ templateData . template ?. id ] ;
36+
37+ const component = await PageTemplate . render . preload ( ) ;
38+
39+ const graphqlData = await fetchQueries ( {
40+ queries : component . default . queries ,
41+ context,
42+ props : {
43+ uri,
44+ templateData,
45+ } ,
46+ } ) ;
47+
3348 return {
3449 props : {
35- params,
3650 uri,
3751 // https://github.com/vercel/next.js/discussions/11209#discussioncomment-35915
3852 templateData : JSON . parse ( JSON . stringify ( templateData ) ) ,
53+ graphqlData : JSON . parse ( JSON . stringify ( graphqlData ) ) ,
3954 } ,
4055 } ;
4156}
You can’t perform that action at this time.
0 commit comments