Skip to content

pilcrowOnPaper/astro-form-actions

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Astro form actions

Use progressive form enhancement and handle form submissions in Astro. This library only uses native Web APIs and can be used in any runtime.

npm i astro-form-actions
pnpm add astro-form-actions
yarn add astro-form-actions

Documentation: https://github.com/pilcrowOnPaper/astro-form-actions/wiki

Demo: https://astro-form-actions.vercel.app

Need a library to parse your forms? Check out my other project Adria!

Features

  • Simple
  • Type inference
  • Supports multipart form data
  • Framework agnostic

Overview

This library is made up of 2 parts: server side and client side.

Server side

handleFormSubmission will handle all POST requests to the page.

// inside .astro page
import {
	handleFormSubmission,
	reject,
	resolve,
	redirect
} from "astro-form-actions";

const { response, error, inputValues, body } = await handleFormSubmission(
	Astro,
	async (formData) => {
		const message = formData.get("message");
		if (typeof notes !== "string")
			return reject(400, {
				message: "bad input"
			});
		// do some stuff
		return resolve({
			success: true
		});
	}
);
if (response) return response;

Client side

You can use a regular HTML form:

<form method="post">
	<input name="message" />
	<input type="submit" />
</form>

Or, by using component frameworks like Solid (or just even vanilla JS), you can use submitForm to make the submission.

import { submitForm } from "astro-form-actions/client";

export default () => {
	return (
		<form
			method="post"
			onSubmit={(e) => {
				e.preventDefault();
				const { error } = await submitForm<
					{
						success: boolean;
					},
					{
						message: string;
					}
				>(e.currentTarget);
			}}
		>
			<input name="message" />
			<input type="submit" />
		</form>
	);
};

Other

Parts of the library is from https://github.com/nachomazzara/parse-multipart-data.

About

Forms in Astro made easy

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published