From 84189b6511dc2a14bcfe608696f56a64c2046f39 Mon Sep 17 00:00:00 2001 From: Ben Holmes Date: Tue, 30 Jul 2024 11:04:10 -0400 Subject: Actions: New fallback behavior with `action={actions.name}` (#11570) * feat: support _astroAction query param * feat(test): _astroAction query param * fix: handle _actions requests from legacy fallback * feat(e2e): new actions pattern on blog test * feat: update React 19 adapter to use query params * fix: remove legacy getApiContext() * feat: ActionQueryStringInvalidError * fix: update error description * feat: ActionQueryStringInvalidError * chore: comment on _actions skip * feat: .queryString property * chore: comment on throw new Error * chore: better guess for "why" on query string * chore: remove console log * chore: changeset * chore: changeset --- packages/integrations/react/server.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'packages/integrations/react/server.js') diff --git a/packages/integrations/react/server.js b/packages/integrations/react/server.js index 59134a699..6624a5610 100644 --- a/packages/integrations/react/server.js +++ b/packages/integrations/react/server.js @@ -131,6 +131,7 @@ async function getFormState({ result }) { if (!actionResult) return undefined; if (!isFormRequest(request.headers.get('content-type'))) return undefined; + const { searchParams } = new URL(request.url); const formData = await request.clone().formData(); /** * The key generated by React to identify each `useActionState()` call. @@ -142,7 +143,11 @@ async function getFormState({ result }) { * This matches the endpoint path. * @example "/_actions/blog.like" */ - const actionName = formData.get('_astroAction')?.toString(); + const actionName = + searchParams.get('_astroAction') ?? + /* Legacy. TODO: remove for stable */ formData + .get('_astroAction') + ?.toString(); if (!actionKey || !actionName) return undefined; -- cgit v1.2.3