0.2.2 • Published 2 years ago

remix-easy-mode v0.2.2

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

Remix Easy Mode

Simple, typesafe toolkit for developing highly interactive Remix apps

Features

  • 100% typesafe
  • Built on zod
  • Inspired by TRPC
  • Designed for building highly interactive apps
  • Bone-simple client form validations
  • Server-side input validations a la TRPC
  • Session middleware via "bouncer" pattern
  • onSuccess, onError, and onSettled mutation callbacks a la react-query
  • Input helpers are unstyled (and polymorphic, if you want to supply your own input components)
  • Optional custom serializers (e.g., superjson)
  • MIT licensed

Installation

npm i remix-easy-mode zod

Usage

Resource Route

import type { DataFunctionArgs } from "@remix-run/server-runtime"
import { dataFunctionHelper, useAction } from "remix-easy-mode"
import { z } from "zod"

const schema = z.object({
  someUserInput: z.string(),
})

// this is like a TRPC procedure
export const action = (ctx: DataFunctionArgs) => {
  return dataFunctionHelper({
    ctx,
    schema,
    bouncer: async ({ ctx, csrfToken }) => {
      // (1) throw error or (2) return user session
    },
    fn: async ({ input, session }) => console.log({ input, session }), // typesafe!,
  })
}

// return hook from your resource route to use on client
export function useExample() {
  return useAction<typeof action, typeof schema>({
    path: "/resource-route",
    schema,
    onSuccess: (res) => console.log(res), // typesafe!,
  })
}

Client-side Form

import { InputHelper } from "remix-easy-mode"
import { useExample } from "./resource-route"
import { StyledInput } from "./your-custom-input-component"

export default function Index() {
  const { Form, fields } = useExample()

  return (
    <div>
      <Form
        csrfToken="whatever" // optional
        onSuccess={(res) => console.log(res)} // typesafe!
      >
        <InputHelper {...fields.someUserInput.props} component={StyledInput} />

        <button>Submit</button>
      </Form>
    </div>
  )
}

Example App

To run the example app:

pnpm install
cd packages/example
pnpm run dev

Then visit localhost:3000.

Peer Dependencies

react, @remix-run/react, @remix-run/server-runtime, zod

Disclaimer

This is a work in progress. It's not yet battle-tested, and the pre-1.0.0 API will change without notice. If you want to use this in production, be careful, and set your dependency to a specific version.

0.1.2

2 years ago

0.2.2-beta.0

2 years ago

0.2.0-beta.0

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.2.2

2 years ago

0.1.0-beta.3

2 years ago

0.1.0-beta.2

2 years ago

0.1.0-beta.5

2 years ago

0.1.0-beta.4

2 years ago

0.1.0-beta.1

2 years ago

0.1.0-beta.0

2 years ago

0.1.0

2 years ago

0.1.1

2 years ago

0.0.3-beta.2

2 years ago

0.0.3-beta.3

2 years ago

0.0.3-beta.0

2 years ago

0.0.3-beta.1

2 years ago

0.0.24

2 years ago

0.0.23

2 years ago

0.0.22

2 years ago

0.0.21

2 years ago

0.0.21-beta.37

2 years ago

0.0.21-beta.36

2 years ago

0.0.21-beta.35

2 years ago

0.0.21-beta.34

2 years ago

0.0.21-beta.33

2 years ago

0.0.21-beta.32

2 years ago

0.0.21-beta.31

2 years ago

0.0.21-beta.30

2 years ago

0.0.21-beta.29

2 years ago

0.0.21-beta.28

2 years ago

0.0.21-beta.27

2 years ago

0.0.21-beta.26

2 years ago

0.0.21-beta.25

2 years ago

0.0.21-beta.24

2 years ago

0.0.21-beta.23

2 years ago

0.0.21-beta.22

2 years ago

0.0.21-beta.21

2 years ago

0.0.21-beta.20

2 years ago

0.0.21-beta.19

2 years ago

0.0.21-beta.18

2 years ago

0.0.21-beta.17

2 years ago

0.0.21-beta.16

2 years ago

0.0.21-beta.15

2 years ago

0.0.21-beta.14

2 years ago

0.0.21-beta.13

2 years ago

0.0.21-beta.12

2 years ago

0.0.21-beta.11

2 years ago

0.0.21-beta.10

2 years ago

0.0.21-beta.9

2 years ago

0.0.21-beta.8

2 years ago

0.0.21-beta.7

2 years ago

0.0.21-beta.6

2 years ago

0.0.21-beta.5

2 years ago

0.0.21-beta.4

2 years ago

0.0.21-beta.3

2 years ago

0.0.21-beta.2

2 years ago

0.0.21-beta.1

2 years ago

0.0.21-beta.0

2 years ago

0.0.20

2 years ago

0.0.19

2 years ago