@@ -8,15 +8,17 @@ import getFrontendPage, {frontendPageSeo} from './getFrontendPage'
8
8
* Retrieve static props by post type.
9
9
*
10
10
* @author WebDevStudios
11
- * @param {string } params Post params (e.g., slug).
12
- * @param {string } postType Post Type.
13
- * @return {object } Object containing post props and revalidate setting.
11
+ * @param {string } params Post params (e.g., slug).
12
+ * @param {string } postType Post Type.
13
+ * @param {boolean } preview Whether requesting preview of post.
14
+ * @param {object } previewData Post preview data.
15
+ * @return {object } Object containing post props and revalidate setting.
14
16
*/
15
17
export default async function getPostTypeStaticProps (
16
18
params ,
17
- postType
18
- // preview = false, // TODO - add preview handling.
19
- // previewData = null
19
+ postType ,
20
+ preview = false ,
21
+ previewData = null
20
22
) {
21
23
// Set revalidate length (seconds).
22
24
const revalidate = 60 * 5
@@ -59,16 +61,33 @@ export default async function getPostTypeStaticProps(
59
61
// Handle catch-all routes.
60
62
const slug = Array . isArray ( params . slug ) ? params . slug . join ( '/' ) : params . slug
61
63
64
+ // Get post identifier (ID or slug).
65
+ const postId = Number . isInteger ( Number ( slug ) ) ? Number ( slug ) : slug
66
+
67
+ // Check if preview mode is active and valid for current post (preview and post IDs or slugs match).
68
+ const isCurrentPostPreview =
69
+ preview &&
70
+ ( postId === previewData ?. post ?. id || postId === previewData ?. post ?. slug )
71
+
72
+ // Check if viewing a draft post.
73
+ const isDraft = isCurrentPostPreview && 'draft' === previewData ?. post ?. status
74
+
75
+ // Set query variables.
76
+ const id = isDraft ? previewData . post . id : slug
77
+ const idType = isDraft ? 'DATABASE_ID' : 'SLUG'
78
+
62
79
// Retrieve post data.
63
80
const { apolloClient, error, ...postData } = await getPostTypeById (
64
81
postType ,
65
- slug
82
+ id ,
83
+ idType
66
84
)
67
85
68
86
const props = {
69
87
...postData ,
70
88
...sharedProps ,
71
- error
89
+ error,
90
+ preview : isCurrentPostPreview
72
91
}
73
92
74
93
// Custom handling for homepage.
0 commit comments