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

react-leave-page-confirm

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-leave-page-confirm

Render modal window to confirm page leave

  • 0.0.6
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
20
increased by150%
Maintainers
1
Weekly downloads
 
Created
Source

react-leave-page-confirm

The package was written to cover the case when a user try to leave page with changes that may be lost (e.g forms). It is based on awesome libs React and Material-UI

The package prevents browser history changes as well as page reload

Unfortunately modal window can be customized only for browser history changes due to some limitations: custom message deprecation

Installation

  # with npm
  npm install react-leave-page-confirm

  # with yarn
  yarn add react-leave-page-confirm

Usage

There are two possible options how the package can be used:

  • ConfirmPageLeave component
  • usePageLeaveBlocker hook

ConfirmPageLeave is the simplest way to consume package, it contains all necessary UI parts to render modal dialog window. Under the hood it uses usePageLeaveBlocker hook

Props

PropTypeRequiredDescription
isActivebooleantrueactive logic to prevent page leave and display confirm modals on history change / page reload
historyHashHistory | BrowserHistory | MemoryHistorytruehistory object created by history package
titlestringfalseoptional title for modal dialog (history change only)
messagestringfalseoptional message in modal dialog (history change only)

usePageLeaveBlocker requires that modal dialog for history change case together with logic to open/close it was written by consumer

Argument (object)

FieldTypeRequiredDescription
isActivebooleantrueactive logic to prevent page leave and display confirm modals on history change / page reload
historyHashHistory | BrowserHistory | MemoryHistorytruehistory object created by history package
onHistoryChange(event: Transition, isBlocked: boolean) => voidtruecallback that fires whenever history change event happened, second argument describes if this change is blocked (useful to trigger logic to open/close modal)

Examples

import React, { ChangeEvent, } from 'react';
import { createBrowserHistory} from 'history'
import { ConfirmPageLeave } from 'react-leave-page-confirm'

const history = createBrowserHistory();

const initialValues = {
  userName: '',
}

export const  App = () => {
  const [isDataChanged, setIsDataChanged] = React.useState(false);
  const [userName, setUserName ] = React.useState('')

  const handleUserNameChange = (e: ChangeEvent<HTMLInputElement>) => {
    const { value } = e.target

    setUserName(value)

    if (value !== initialValues.userName) {
      setIsDataChanged(true)
    } else {
      setIsDataChanged(false)
    }
  }

  return (
    <div className="App">
      <form>
        <input value={userName} onChange={handleUserNameChange} />
        <button type="submit">submit</button>
      </form>

      <a href="/test" onClick={(e: React.MouseEvent) => { 
        e.preventDefault(); 
        history.push(`/test`)}}
      >
        link to test page
      </a>

      <ConfirmPageLeave isActive={isDataChanged} history={history} />
    </div>
  );
}

in the example above neither page refresh nor link won't work without confirmation modal dialog in case value in "input" HTML element is changed (isDataChanged === true)

Keywords

FAQs

Package last updated on 23 Jul 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