Pop new windows in React, using window.open
.
Inspired by David Gilbertson's article (must read, must follow).
- Only 2.68KB (gzipped!).
- Support the full
window.open
api. - Built for React 16 (uses
ReactDOM.createPortal
). - Handler for blocked popups (via
onBlock
prop). - Center popups according to the parent window or screen.
-
npm install react-new-window --save
or
-
yarn add react-new-window
import React from 'react'
import NewWindow from 'react-new-window'
const Demo = () => (
<NewWindow>
<h1>Hi 👋</h1>
</NewWindow>
)
When <NewWindow />
is mounted a popup window will be opened. When unmounted then the popup will be closed.
The children
contents is what will be rendered into the new popup window. In that case Hi 👋
will be the content. The content can include any react-stateful code.
Properties | Type | Default | Description |
---|---|---|---|
url |
String |
|
The URL to open, if specified any children will be overriden (more details on url ). |
name |
String |
|
The name of the window (more details on windowName ). |
title |
String |
|
The title of the new window document. |
features |
Object |
{} |
The set of window features (more details on windowFeatures ). |
onUnload |
Function |
undefined |
A function to be triggered before the new window unload. |
onBlock |
Function |
undefined |
A function to be triggered when the new window could not be opened. |
center |
String |
parent |
Indicate how to center the new window. Valid values are: parent or screen . parent will center the new window according to its parent window. screen will center the new window according to the screen. |
copyStyles |
Boolean |
true |
If specified, copy styles from parent window's document. |
scripts |
Array |
|
If specified, add script elements to the head of new window's document. |
metas |
Array |
|
If specified, add meta elements to the head of new window's document. |
Pass the following data to <NewWindow scripts={scripts}>
[
{
src: "http://www.example.com/example.js"
},
{
code: "console.log('This is an example')"
}
];
will generate the following script tags:
<script type="text/javascript" src="http://www.example.com/example.js"></script>
<script type="text/javascript">console.log('This is an example')</script>
Pass the following data to <NewWindow metas={metas}>
[
{
charset: "UTF-8",
content: "IE=edge"
}
];
will generate the following script tags:
<meta charset="UTF-8" content="IE=edge">
Tests are manually done using Storybook. It can be run locally with: yarn storybook
.
To start contributing to this project, please do:
- Fork and clone this repo.
- Do your work.
- Create a PR.
To release this project the following tasks should be done:
- Build distribution files:
yarn build
. - Build Storybook demo files:
yarn build-storybook
. - Bump version and create tag:
npm version #.#.# -m 'Version %s.'
. - Push new created tag:
git push origin --tags
. - Publish:
npm publish
.
Made with ❤️ by Rubens Mariuzzo.