@@ -26,6 +26,7 @@ import {
2626import {
2727 type AnyFormRequest ,
2828 type FormContext ,
29+ type OnRequestCallback ,
2930 type PreparePageEventRequestOptions
3031} from '~/src/server/plugins/engine/types.js'
3132import {
@@ -74,7 +75,8 @@ async function handleHttpEvent(
7475}
7576
7677export function makeGetHandler (
77- preparePageEventRequestOptions ?: PreparePageEventRequestOptions
78+ preparePageEventRequestOptions ?: PreparePageEventRequestOptions ,
79+ onRequest ?: OnRequestCallback
7880) {
7981 return function getHandler ( request : FormRequest , h : FormResponseToolkit ) {
8082 const { params } = request
@@ -83,75 +85,86 @@ export function makeGetHandler(
8385 return dispatchHandler ( request , h )
8486 }
8587
86- return redirectOrMakeHandler ( request , h , async ( page , context ) => {
87- // Check for a page onLoad HTTP event and if one exists,
88- // call it and assign the response to the context data
89- const { events } = page
90- const { model } = request . app
88+ return redirectOrMakeHandler (
89+ request ,
90+ h ,
91+ onRequest ,
92+ async ( page , context ) => {
93+ // Check for a page onLoad HTTP event and if one exists,
94+ // call it and assign the response to the context data
95+ const { events } = page
96+ const { model } = request . app
9197
92- if ( ! model ) {
93- throw Boom . notFound ( `No model found for /${ params . path } ` )
94- }
98+ if ( ! model ) {
99+ throw Boom . notFound ( `No model found for /${ params . path } ` )
100+ }
95101
96- if ( events ?. onLoad && events . onLoad . type === 'http' ) {
97- await handleHttpEvent (
98- request ,
99- page ,
100- context ,
101- events . onLoad ,
102- model ,
103- preparePageEventRequestOptions
104- )
105- }
102+ if ( events ?. onLoad && events . onLoad . type === 'http' ) {
103+ await handleHttpEvent (
104+ request ,
105+ page ,
106+ context ,
107+ events . onLoad ,
108+ model ,
109+ preparePageEventRequestOptions
110+ )
111+ }
106112
107- return page . makeGetRouteHandler ( ) ( request , context , h )
108- } )
113+ return page . makeGetRouteHandler ( ) ( request , context , h )
114+ }
115+ )
109116 }
110117}
111118
112119export function makePostHandler (
113- preparePageEventRequestOptions ?: PreparePageEventRequestOptions
120+ preparePageEventRequestOptions ?: PreparePageEventRequestOptions ,
121+ onRequest ?: OnRequestCallback
114122) {
115123 return function postHandler (
116124 request : FormRequestPayload ,
117125 h : FormResponseToolkit
118126 ) {
119127 const { query } = request
120128
121- return redirectOrMakeHandler ( request , h , async ( page , context ) => {
122- const { pageDef } = page
123- const { isForceAccess } = context
124- const { model } = request . app
125- const { events } = page
129+ return redirectOrMakeHandler (
130+ request ,
131+ h ,
132+ onRequest ,
133+ async ( page , context ) => {
134+ const { pageDef } = page
135+ const { isForceAccess } = context
136+ const { model } = request . app
137+ const { events } = page
126138
127- // Redirect to GET for preview URL direct access
128- if ( isForceAccess && ! hasFormComponents ( pageDef ) ) {
129- return proceed ( request , h , redirectPath ( page . href , query ) )
130- }
139+ // Redirect to GET for preview URL direct access
140+ if ( isForceAccess && ! hasFormComponents ( pageDef ) ) {
141+ return proceed ( request , h , redirectPath ( page . href , query ) )
142+ }
131143
132- if ( ! model ) {
133- throw Boom . notFound ( `No model found for /${ request . params . path } ` )
134- }
144+ if ( ! model ) {
145+ throw Boom . notFound ( `No model found for /${ request . params . path } ` )
146+ }
135147
136- const response = await page . makePostRouteHandler ( ) ( request , context , h )
148+ const response = await page . makePostRouteHandler ( ) ( request , context , h )
137149
138- if (
139- events ?. onSave &&
140- events . onSave . type === 'http' &&
141- isSuccessful ( response )
142- ) {
143- await handleHttpEvent (
144- request ,
145- page ,
146- context ,
147- events . onSave ,
148- model ,
149- preparePageEventRequestOptions
150- )
151- }
150+ if (
151+ events ?. onSave &&
152+ events . onSave . type === 'http' &&
153+ isSuccessful ( response )
154+ ) {
155+ await handleHttpEvent (
156+ request ,
157+ page ,
158+ context ,
159+ events . onSave ,
160+ model ,
161+ preparePageEventRequestOptions
162+ )
163+ }
152164
153- return response
154- } )
165+ return response
166+ }
167+ )
155168 }
156169}
157170
@@ -164,13 +177,14 @@ function isSuccessful(response: ResponseObject): boolean {
164177export function getRoutes (
165178 getRouteOptions : RouteOptions < FormRequestRefs > ,
166179 postRouteOptions : RouteOptions < FormRequestPayloadRefs > ,
167- preparePageEventRequestOptions ?: PreparePageEventRequestOptions
180+ preparePageEventRequestOptions ?: PreparePageEventRequestOptions ,
181+ onRequest ?: OnRequestCallback
168182) : ( ServerRoute < FormRequestRefs > | ServerRoute < FormRequestPayloadRefs > ) [ ] {
169183 return [
170184 {
171185 method : 'get' ,
172186 path : '/{slug}' ,
173- handler : makeGetHandler ( preparePageEventRequestOptions ) ,
187+ handler : makeGetHandler ( preparePageEventRequestOptions , onRequest ) ,
174188 options : {
175189 ...getRouteOptions ,
176190 validate : {
@@ -197,7 +211,7 @@ export function getRoutes(
197211 {
198212 method : 'get' ,
199213 path : '/{slug}/{path}/{itemId?}' ,
200- handler : makeGetHandler ( preparePageEventRequestOptions ) ,
214+ handler : makeGetHandler ( preparePageEventRequestOptions , onRequest ) ,
201215 options : {
202216 ...getRouteOptions ,
203217 validate : {
@@ -212,7 +226,7 @@ export function getRoutes(
212226 {
213227 method : 'get' ,
214228 path : '/preview/{state}/{slug}/{path}/{itemId?}' ,
215- handler : makeGetHandler ( preparePageEventRequestOptions ) ,
229+ handler : makeGetHandler ( preparePageEventRequestOptions , onRequest ) ,
216230 options : {
217231 ...getRouteOptions ,
218232 validate : {
@@ -228,7 +242,7 @@ export function getRoutes(
228242 {
229243 method : 'post' ,
230244 path : '/{slug}/{path}/{itemId?}' ,
231- handler : makePostHandler ( preparePageEventRequestOptions ) ,
245+ handler : makePostHandler ( preparePageEventRequestOptions , onRequest ) ,
232246 options : {
233247 ...postRouteOptions ,
234248 validate : {
@@ -250,7 +264,7 @@ export function getRoutes(
250264 {
251265 method : 'post' ,
252266 path : '/preview/{state}/{slug}/{path}/{itemId?}' ,
253- handler : makePostHandler ( preparePageEventRequestOptions ) ,
267+ handler : makePostHandler ( preparePageEventRequestOptions , onRequest ) ,
254268 options : {
255269 ...postRouteOptions ,
256270 validate : {
0 commit comments