Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

react-autosaver

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-autosaver

Simple higher-order functions and hooks to manage auto-saving in React

  • 0.0.6
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

react-autosaver

⚠️ This library is currently pre-release and the API is subject to change without warning!

Introduction

Who is this package for?

Consider using this component if:

  1. You are looking to integrate auto-save functionality in an input-based form
  2. You are looking for a solution where auto-save occurs with a configurable delay
  3. You are looking to bind auto-save events to input events such as blur or when user becomes idle
  4. You want a simple loop based auto-save trigger which can be toggled on/off

What does this package do?

  1. Exposes a component called AutoSaver that has a prop onAutosaveTriggered which allows you to specify a callback whenever the component determines that auto save should occur

  2. Exposes a component called WatchChanges which can be placed as a child of the parent AutoSaver. This component can bind to inputs using React refs and triggers whenever the following happens:

  • An input is blurred
  • An input onChange callback fires and then becomes idle
  • didChangeHappen callback function is manually called
  1. Allows configuring a global auto-save delay for the onAutosave callback

  2. Allows configuring auto-save delays per WatchChanges instance, so you can fine tune exactly how soon or late the autosave event is triggered on per-component basis

  3. Allows toggling on/off an autosave loop

Installation

Install the library using a package manager of your choice:

# npm
npm i react-autosaver --save

# yarn
yarn add react-autosaver

Import components as needed:

import { AutoSave } from 'react-autosaver';

react-autosaver has the following peer dependencies:

"prop-types": "^15.7.2"
"react": "^16.8.0"
"react-dom": "^16.8.0"

How to Use

Minimal example

  1. With auto-save loop
import React, { useState, useCallback } from 'react';
import { AutoSave, WatchChanges } from 'react-autosaver';

export default function App() {
  const [isSaving, setIsSaving] = useState(false);

  const callback = useCallback(() => {
    console.log('Lets autosave now!');
  }, []);

  return (
    <AutoSave
      isAutosaving={isSaving}
      enableAutosaveLoop
      onAutosaveTriggered={callback}
    />
  );
}
  1. With WatchChanges
import React, { useState, useCallback } from 'react';
import { AutoSave, WatchChanges } from 'react-autosaver';

export default function App() {
  const [input, setInput] = useState('');
  const [isSaving, setIsSaving] = useState(false);

  const triggerAutoSave = useCallback(() => {
    console.log('Lets autosave now!');
  }, []);

  const onInputChange = (e) => {
    setInput(e.target.value);
  };

  return (
    <AutoSave isAutosaving={isSaving} onAutosaveTriggered={triggerAutoSave}>
      <WatchChanges triggerMode="BLUR">
        {({ autosaveInputRef }) => {
          return (
            <>
              <label>I trigger autosave on blur</label>
              <input
                ref={autosaveInputRef}
                value={input}
                onChange={onInputChange}
              />
            </>
          );
        }}
      </WatchChanges>
    </AutoSave>
  );
}

Triggering auto-save manually

WatchChanges exposes a didChangeHappen callback function which you can call manually. You are not restricted to using inputs bound with a ref, and can manually trigger autosave whenever you determine a save should occur based on your application logic.

<WatchChanges triggerMode="IDLE" inputInputIdleDelay={1500}>
  {({ didChangeHappen }) => {
    return (
      <>
        <label>Custom input which autosaves manually</label>
        <input
          onChange={() => {
            didChangeHappen();
          }}
        />
      </>
    );
  }}
</WatchChanges>

Features

  • TypeScript support
  • ES modules support
  • Does not rely on other third-party dependencies

Testing

// TODO

Contributing

// TODO

Keywords

FAQs

Package last updated on 06 May 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc