npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@sharingapples/form

v1.0.26

Published

The form with hooks

Downloads

12

Readme

Hook based form

Installation

$ yarn add @sharingapples/form

Usage

import {
  Form, Group, Array, useFormInput, useFormSubmit, useFormValue, useFormValidator,
} from '@sharingapples/form';

function required(v) { if (v.length === 0) throw new Error('Value is required'); };
function pipe(...validators) {
  return (value) => {
    validators.reduce((res, valitaor) => validator(value), true);
  }
}

function TextInput({ name, label, validators }) {
  const [value, onChange] = useFormInput(name);
  const error = useFormValidator(name, pipe(...validators));
  function handleChange = useCallback((e) => {
    onChange(e.target.value);
  }, []);


  return (
    <div>
      <label>{label}</label>
      <input type="text" value={value} onChange={handleChange} />
      {error && <span className="error">{error}</span>}
    </div>
  );
}

function Submit({ label }) {
  const submit = useFormSubmit();
  return <button onClick={submit}>{label}</button>
}

export default function CustomForm() {
  function handleSubmit(state) {
    // Perform your api invokation here for data structure
    // state = { personal: { name: '', dob: '' }, job: { company: '' }}
  }

  return (
    <Form onSubmit={handleSubmit}>
      <Group name="personal">
        <TextInput name="name" />
        <TextInput dob="dob" />
      </Group>
      <Group name="job">
        <TextInput name="company" />
      </Group>
      <Submit />
    </Form>
  );
}

API

Form

A top level component that keep tracks of the entire form data.

Props

  • onSubmit: A required callback handler for processing submitted data
  • defaultValue: A default value to prepopulate the form

Group

A component that keep tracks of an object data structure. Can also act as a page within a form with its own onSubmit handling

Props

  • name: Name for the data structure
  • onSubmit: If a submit button is included within the Group, the changes to the data within the group are not reflected back until the submit with proper validation. The onSubmit method is invoked after the data has been validated successfully.

ArrayGroup

Not documented yet

useFormInput

A hook to declare a form input that is connected with the data structure. This hooks works similar to useState hook, where the state is maintained by the closest Group or Form element.

Parameters

  • name: Name within the current data structure to bind to
  • defaultValue: A default value to use, if none found within the data structure.

useFormValue

A hook to extract a named value within the data-structure.

parameters

  • name: Name within the current data structure to bind to
  • context: Used in conjuction with useFormParent to move through the data structure hierarchy.

useFormValidator

A hook for validating data as it changes.

Parameters

  • name: A string that would listen to the named value within the current data structure or a mapping function that returns the validation value.
  • validator: A function that throws an error checking the validation value, or a string that acts as an error message for a falsy validation value.

useFormSubmit

A hook for getting a submit method to be called from Submit buttons.