Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

Forms in Astro made easy
https://github.com/pilcrowOnPaper/astro-form-actions

Last synced: 14 days ago
JSON representation

Forms in Astro made easy

Awesome Lists containing this project

README

        

# 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](https://github.com/pilcrowOnPaper/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.

```ts
// 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:

```html


```

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

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

export default () => {
return (
{
e.preventDefault();
const { error } = await submitForm<
{
success: boolean;
},
{
message: string;
}
>(e.currentTarget);
}}
>



);
};
```

## Other

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