@@ -4,7 +4,8 @@ import { EntityRenderer } from "@/components/entity"
44import { ViewRenderer } from "@/components/view"
55
66interface PageProps {
7- params : Promise < { slug : string [ ] } >
7+ params : { slug : string [ ] }
8+ searchParams ?: Record < string , string | string [ ] | undefined >
89}
910
1011/**
@@ -39,11 +40,12 @@ const DEFAULT_INCLUDES = [
3940 * 4. Fetches the resource via JSON:API with media includes
4041 * 5. Renders with the appropriate component
4142 */
42- export default async function Page ( { params } : PageProps ) {
43- const { slug } = await params
44- const path = "/" + slug . join ( "/" )
43+ export default async function Page ( { params, searchParams } : PageProps ) {
44+ const path = "/" + params . slug . join ( "/" )
4545
4646 try {
47+ const query = searchParamsToString ( searchParams )
48+
4749 // Resolve the path to a Drupal resource
4850 const resolved = await resolvePath ( path )
4951
@@ -64,8 +66,9 @@ export default async function Page({ params }: PageProps) {
6466
6567 // Handle views (headless)
6668 if ( resolved . kind === "view" && resolved . data_url ) {
67- const doc = await fetchView ( resolved . data_url )
68- return < ViewRenderer doc = { doc } />
69+ const dataUrl = query ? `${ resolved . data_url } ?${ query } ` : resolved . data_url
70+ const doc = await fetchView ( dataUrl )
71+ return < ViewRenderer doc = { doc } currentPath = { path } />
6972 }
7073
7174 // Handle entities
@@ -107,8 +110,7 @@ export default async function Page({ params }: PageProps) {
107110 * Generate metadata for SEO.
108111 */
109112export async function generateMetadata ( { params } : PageProps ) {
110- const { slug } = await params
111- const path = "/" + slug . join ( "/" )
113+ const path = "/" + params . slug . join ( "/" )
112114
113115 try {
114116 const resolved = await resolvePath ( path )
@@ -135,3 +137,27 @@ export async function generateMetadata({ params }: PageProps) {
135137 return { }
136138 }
137139}
140+
141+ function searchParamsToString (
142+ searchParams : Record < string , string | string [ ] | undefined > | undefined
143+ ) : string {
144+ if ( ! searchParams ) {
145+ return ""
146+ }
147+
148+ const params = new URLSearchParams ( )
149+
150+ for ( const [ key , value ] of Object . entries ( searchParams ) ) {
151+ if ( typeof value === "string" ) {
152+ params . set ( key , value )
153+ continue
154+ }
155+ if ( Array . isArray ( value ) ) {
156+ for ( const v of value ) {
157+ params . append ( key , v )
158+ }
159+ }
160+ }
161+
162+ return params . toString ( )
163+ }
0 commit comments