Giter Site home page Giter Site logo

astro-form-actions's Introduction

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.

astro-form-actions's People

Contributors

pilcrowonpaper avatar

Stargazers

Growtree9 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.