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

herotofu-react

v1.0.6

Published

Various helpers to work with APIs that herotofu.com provides, such as form endpoints.

Downloads

371

Readme

MIT License Issues LinkedIn

Getting Started

Prerequisites

Get a free form endpoint URL at https://herotofu.com. You can also use your own backend, which handles FormData or JSON POST requests.

  1. Signup
  2. Create the new form endpoint
  3. Copy the full endpoint URL or just the ID part that should look like 5e3c9090-017d-11ec-bb78-dfaf038986aa

Installation

  1. Install the NPM package
  • for npm:
    npm install herotofu-react --save
  • or for yarn:
    yarn add herotofu-react
  • or for pnpm:
    pnpm add herotofu-react
  1. Have your form endpoint URL.

Usage

useFormData()

Sends the multipart/form-data request. Can process file uploads, too.

import { useFormData } from 'herotofu-react';

function ExampleComponent() {
  const { formState, getFormSubmitHandler } = useFormData('HEROTOFU_FORM_ID_OR_URL');

  const onSubmitCallback = ({ status, data }) => {
    console.log(`The form finished submission in status: ${status} and data: ${JSON.stringify(data)}`);
  };

  return (
    <>
      {!!formState.status && <div>Current form status is: {formState.status}</div>}
      <form onSubmit={getFormSubmitHandler(onSubmitCallback)}>
        <div>
          <input type="text" name="name" placeholder="Your name" />
        </div>
        <div>
          <input type="text" name="email" placeholder="Your email" required />
        </div>
        ... the rest of the inputs ...
        <button type="submit">Submit</button>
      </form>
    </>
  );
}

If you want to include additional data that won't be presented in the form, pass it as a second argument to the useFormData hook:

const { formState, getFormSubmitHandler } = useFormData('HEROTOFU_FORM_ID_OR_URL', {
  additionalData: 'any string or number',
});

The onSubmitCallback is optional and can be skipped:


const { formState, getFormSubmitHandler } = useFormData('HEROTOFU_FORM_ID_OR_URL');

return (
  <form onSubmit={getFormSubmitHandler()}>
  ...rest of the code

useJsonData()

Sends application/json requests even without an actual form.

import { useJsonData } from 'herotofu-react';

function ExampleComponent() {
  const { dataState, sendData } = useJsonData('HEROTOFU_FORM_ID_OR_URL');

  const onSubmitCallback = ({status, data}) => {
    console.log(`The data was sent with status: ${status} and data: ${JSON.stringify(data)}`);
  };

  const handleButtonClick = () => {
    const dataToSend = { name: 'Joe Bloggs', email: '[email protected]' };
    sendData(onSubmitCallback, dataToSend);
  }

  ...

  return (
    <>
      {!!dataState && <div>Current requests status is: {dataState.status}</div>}
      <div><button onClick={handleButtonClick()}>Send JSON data</button></div>
    </>
  );
}

useSubscribeEmail()

Lightly validates the provided email and sends it to the backend.

import { useSubscribeEmail } from 'herotofu-react';

function ExampleComponent() {
  const { subscribeState, subscribe } = useSubscribeEmail('HEROTOFU_FORM_ID_OR_URL');

  const onSubmitCallback = ({ status, data }) => {
    console.log(`The user was subscribed with status: ${status} and data: ${JSON.stringify(data)}`);
  };

  const handleButtonClick = () => {
    subscribe('[email protected]', onSubmitCallback);
  };

  return (
    <>
      {!!subscribeState && <div>Current requests status is: {subscribeState.status}</div>}
      <div>
        <button onClick={handleButtonClick()}>Send JSON data</button>
      </div>
    </>
  );
}

For more examples, please refer to the Guides

Contributing

If you have a suggestion that would make this better, please fork the repo and create a pull request.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

Distributed under the MIT License. See LICENSE for more information.

Contact