8000 GitHub - jbmoelker/utils: Server components for Astro (server + client validation) · GitHub
[go: up one dir, main page]

Skip to content

jbmoelker/utils

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

268 Commits
 
 
 
 
 
 
 
 
< 8000 /td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Astro Forms Utils

Astro Utils

Build License License Version

Server component for Astro (validation and state management)

Full feature server components for Astro.js

This package is a framework for Astro.js that allows you to create forms and manage their state without any JavaScript.

It also allows you to validate the form on the client side and server side, and protect against CSRF attacks.

More features

  • JWT session management
  • Override response at runtime (useful for error handling)
  • Custom server validation with zod
  • Multiples app states at the same time

Show me the code

---
import { Bind, BindForm, BButton, BInput } from "@astro-utils/forms/forms.js";
import Layout from "../layouts/Layout.astro";

const form = Bind();
let showSubmitText: string;

function formSubmit(){
    showSubmitText = `You name is ${form.name}, you are ${form.age} years old. `;
}
---
<Layout>
    <BindForm bind={form}>
        {showSubmitText}
        
        <h4>What you name*</h4>
        <BInput type="text" name="name" maxlength={20} required/>
    
        <h4>Enter age*</h4>
        <BInput type="int" name="age" required/>
    
        <BButton onClick={formSubmit} whenFormOK>Submit</BButton>
    </BindForm>
</Layout>

Usage

Add the middleware to your server

npm install @astro-utils/forms

Add the middleware to your server

src/middleware.ts

import astroForms from "@astro-utils/forms";
import {sequence} from "astro/middleware";

export const onRequest = sequence(astroForms());

Add to Layout

Add the WebForms component in the layout

layouts/Layout.astro

---
import {WebForms} from '@astro-utils/forms/forms.js';
---
<WebForms>
    <slot/>
</WebForms>

Code Integration

This changes astro behavior to allow the form to work, it ensure the components render by the order they are in the file.

astro.config.mjs

import { defineConfig } from 'astro/config';
import astroForms from "@astro-utils/forms/dist/integration.js";

export default defineConfig({
    output: 'server',
    integrations: [astroForms]
});

About

Server components for Astro (server + client validation)

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • TypeScript 81.6%
  • Astro 18.4%
0