Skip to content

Commit 1afc501

Browse files
committed
feat: implement data fetching for templates
1 parent efb5289 commit 1afc501

File tree

2 files changed

+64
-2
lines changed

2 files changed

+64
-2
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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+
}

examples/next/template-hierarchy/example-app/src/pages/[[...uri]].js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { uriToTemplate } from "@/lib/templateHierarchy";
22
import { RouteDataProvider } from "@/lib/context";
33
import availableTemplates from "@/wp-templates";
4+
import { fetchQueries } from "@/lib/queryHandler";
45

56
export 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
}

0 commit comments

Comments
 (0)