Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
666f0e4
Run lifecycle code mod renaming unsafe
Sep 11, 2019
c67de22
Merge pull request #1 from JackHowa/feature/remove-deprecation-warnings
JackHowa Dec 12, 2019
247b11d
v2.0.1
JackHowa Dec 12, 2019
67f4b9c
Fix install path
JackHowa Dec 12, 2019
6023cc3
Merge pull request #2 from JackHowa/update-readme-install
JackHowa Dec 12, 2019
d7a2364
Update import
JackHowa Dec 12, 2019
a369aa4
Merge pull request #3 from JackHowa/update-usage-readme
JackHowa Dec 12, 2019
ff2c8c1
Add for ie compat
JackHowa Jan 4, 2020
c5d612a
Show goals for readme with spread operator
JackHowa Jan 4, 2020
97ecfcb
Update entrypoint and build process for transpilation
JackHowa Jan 4, 2020
9411587
Update contributor
JackHowa Jan 4, 2020
a68d4ad
Update jest to ensure tests run, some failing
JackHowa Jan 4, 2020
02cda3e
Upgrade react after seeing react related issue
JackHowa Jan 4, 2020
70e5323
Update version number
JackHowa Jan 27, 2020
5036f95
Merge pull request #4 from JackHowa/transpile-spread-operator
JackHowa Jan 27, 2020
14af953
Moved class component outside forwardRef function
marcelkooi Apr 13, 2020
6440964
Update version
JackHowa Apr 13, 2020
1b70023
Update url and homepage to fork
JackHowa Apr 13, 2020
7e36d55
Merge pull request #6 from JackHowa/2.0.3-bump
JackHowa Apr 13, 2020
088b979
Merge pull request #5 from marcelkooi/fix-forwardref
JackHowa Apr 13, 2020
10149f6
Update version after merge
JackHowa Apr 13, 2020
f1fd9f5
Bump version with merged pr for forward ref
JackHowa Apr 14, 2020
211552c
Re-connect if the channel is changed
whatcould May 26, 2020
32f18ee
Merge pull request #7 from whatcould/master
JackHowa Sep 26, 2020
6543b37
2.0.6
JackHowa Sep 26, 2020
24b3a6e
Bump yargs-parser from 13.1.1 to 13.1.2
dependabot[bot] Oct 27, 2020
454f31f
Bump acorn from 5.7.3 to 5.7.4
dependabot[bot] Oct 27, 2020
0703fa1
Bump lodash from 4.17.15 to 4.17.20
dependabot[bot] Oct 27, 2020
55f9fff
Merge pull request #10 from JackHowa/dependabot/npm_and_yarn/lodash-4…
JackHowa Nov 19, 2020
4f26a1f
Merge pull request #9 from JackHowa/dependabot/npm_and_yarn/acorn-5.7.4
JackHowa Nov 19, 2020
f058b68
Merge pull request #8 from JackHowa/dependabot/npm_and_yarn/yargs-par…
JackHowa Nov 19, 2020
dc573d0
2.0.7
JackHowa Nov 19, 2020
4ce69d2
Include only required dist file
JackHowa Nov 19, 2020
111928c
Update major version as shipping different output
JackHowa Nov 19, 2020
6f237c7
chore: Add related keywords
JackHowa Nov 19, 2020
18a5b6e
Merge pull request #11 from JackHowa/PERF-exclude-coverage-non-transp…
JackHowa Nov 19, 2020
90aefe3
Build output after upgrading babel it seems
JackHowa Nov 19, 2020
53cb91d
Run yarn audit to remove security issues for acorn, node-fetch
JackHowa Nov 19, 2020
41bbdd1
Merge pull request #12 from JackHowa/upgrade-security-dependencies
JackHowa Nov 19, 2020
1247dc0
3.0.1
JackHowa Nov 19, 2020
be6fe8d
chore: Update node-notifier per security
Dec 31, 2020
9c5d6da
Merge pull request #14 from JackHowa/security-node-issue-13
Dec 31, 2020
e9d513e
3.0.2
Dec 31, 2020
2a252cf
Merge branch 'master' of github.com:JackHowa/react-actioncable-provider
Dec 31, 2020
cfc4b7f
3.0.3
Dec 31, 2020
76df645
Bump y18n from 4.0.0 to 4.0.1
dependabot[bot] Apr 1, 2021
e0deb0c
Merge pull request #17 from JackHowa/dependabot/npm_and_yarn/y18n-4.0.1
JackHowa Apr 8, 2021
ff8722a
fix: upgrade actioncable from 5.2.4 to 5.2.5
snyk-bot Apr 17, 2021
357bd26
Bump hosted-git-info from 2.8.8 to 2.8.9
dependabot[bot] May 11, 2021
86e2aa5
Bump lodash from 4.17.20 to 4.17.21
dependabot[bot] May 11, 2021
ee214cd
Merge pull request #20 from JackHowa/dependabot/npm_and_yarn/lodash-4…
May 25, 2021
c2dccbb
Bump browserslist from 4.14.7 to 4.16.6
dependabot[bot] May 25, 2021
0f53d94
Merge pull request #19 from JackHowa/dependabot/npm_and_yarn/hosted-g…
May 25, 2021
85da0cd
Merge pull request #21 from JackHowa/dependabot/npm_and_yarn/browsers…
May 25, 2021
7304a59
Merge pull request #18 from JackHowa/snyk-upgrade-ba5c50dd90413d4af39…
May 25, 2021
50c9686
3.0.4
May 25, 2021
f0d15d2
fix: upgrade actioncable from 5.2.5 to 5.2.6
snyk-bot May 27, 2021
0ce9c38
Bump ws from 7.4.2 to 7.4.6
dependabot[bot] May 30, 2021
e2c809f
ci: Remove ds store from filesystem
Jul 20, 2021
3705fdd
ci: Remove unused travis pipeline
Jul 20, 2021
3bae7f2
Merge pull request #24 from JackHowa/clean-up-files
Jul 20, 2021
7c9cd03
Merge branch 'master' into dependabot/npm_and_yarn/ws-7.4.6
Jul 20, 2021
fbdea9f
Merge pull request #23 from JackHowa/dependabot/npm_and_yarn/ws-7.4.6
Jul 20, 2021
adbf721
Merge pull request #22 from JackHowa/snyk-upgrade-f400487976810c74076…
Jul 20, 2021
e1b7508
3.0.5
Jul 20, 2021
bfb1c0f
Bump path-parse from 1.0.6 to 1.0.7
dependabot[bot] Aug 12, 2021
eb14149
Merge pull request #25 from JackHowa/dependabot/npm_and_yarn/path-par…
JackHowa Sep 16, 2021
f18edf7
docs: Update publish readme posibility
Sep 16, 2021
c7e65fe
3.0.6
Sep 16, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"presets": ["env", "react"]
}
"presets": ["@babel/preset-env", "@babel/preset-react"]
}
1 change: 1 addition & 0 deletions .browserslistrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
defaults
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,4 @@ jspm_packages

# Optional REPL history
.node_repl_history
.DS_Store
4 changes: 0 additions & 4 deletions .travis.yml

This file was deleted.

25 changes: 17 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ This package provides an ActionCable context provider and consumer to allow you

As this package uses React's new Context API, **React 16.3+ is required**.

Run `npx browserslist` to see default option in `.browserslistrc` [compatibility](https://browserl.ist/?q=defaults). This is so you don't have to transpile this package for IE 11.

## Install

```shell
npm install --save react-actioncable-provider
npm install --save @thrash-industries/react-actioncable-provider
# OR
yarn add react-actioncable-provider
yarn add @thrash-industries/react-actioncable-provider
```

## Usage
Expand All @@ -31,9 +33,9 @@ The provider is used in an outer container and wraps all of the components that
#### With `cable`

```jsx
import ActionCable from 'actioncable';
import ActionCable from "actioncable";

const cable = ActionCable.createConsumer('ws://test.example.com/cable');
const cable = ActionCable.createConsumer("ws://test.example.com/cable");

<ActionCableProvider cable={cable}>...</ActionCableProvider>;
```
Expand All @@ -51,9 +53,9 @@ The consumer will wrap an individual component. It accepts several props:
- `onReceived` [Function] A handler function that is called when the channel transmits a message to the client.

```jsx
import React from 'react';
import PropTypes from 'prop-types';
import { ActionCableConsumer } from 'react-actioncable-provider';
import React from "react";
import PropTypes from "prop-types";
import { ActionCableConsumer } from "@thrash-industries/react-actioncable-provider";

export default class Widget extends React.Component {
static propTypes = {
Expand All @@ -66,7 +68,7 @@ export default class Widget extends React.Component {
this.handleReceived = this.handleReceived.bind(this);

this.state = {
message: ''
message: ""
};
}

Expand All @@ -91,6 +93,13 @@ export default class Widget extends React.Component {
}
```

## Publishing

- `yarn` Install dependencies
- `yarn test` Run tests
- `yarn build` Build for production
- `npm version [patch|minor|major]` Increment version
- `npm publish` Publish to npm
## Other Uses

### React Native
Expand Down
190 changes: 190 additions & 0 deletions dist/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
"use strict";

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

Object.defineProperty(exports, "__esModule", {
value: true
});

var React = require("react");

var PropTypes = require("prop-types");

var actioncable = require("actioncable");

var createReactClass = require("create-react-class");

var _React$createContext = React.createContext(),
Provider = _React$createContext.Provider,
Consumer = _React$createContext.Consumer;

var ActionCableProvider = createReactClass({
displayName: "ActionCableProvider",
UNSAFE_componentWillMount: function UNSAFE_componentWillMount() {
if (this.props.cable) {
this.cable = this.props.cable;
} else {
this.cable = actioncable.createConsumer(this.props.url);
}
},
componentWillUnmount: function componentWillUnmount() {
if (!this.props.cable && this.cable) {
this.cable.disconnect();
}
},
UNSAFE_componentWillReceiveProps: function UNSAFE_componentWillReceiveProps(nextProps) {
// Props not changed
if (this.props.cable === nextProps.cable && this.props.url === nextProps.url) {
return;
} // cable is created by self, disconnect it


this.componentWillUnmount(); // create or assign cable

this.UNSAFE_componentWillMount();
},
render: function render() {
return React.createElement(Provider, {
value: {
cable: this.cable
}
}, this.props.children || null);
}
});
ActionCableProvider.displayName = "ActionCableProvider";
ActionCableProvider.propTypes = {
cable: PropTypes.object,
url: PropTypes.string,
children: PropTypes.any
};
var ActionCableController = createReactClass({
displayName: "ActionCableController",
componentDidMount: function componentDidMount() {
this.connectToChannel();
},
connectToChannel: function connectToChannel() {
var self = this;
var _props = this.props;
var onReceived = _props.onReceived;
var onInitialized = _props.onInitialized;
var onConnected = _props.onConnected;
var onDisconnected = _props.onDisconnected;
var onRejected = _props.onRejected;
this.cable = this.props.cable.subscriptions.create(this.props.channel, {
received: function received(data) {
onReceived && onReceived(data);
},
initialized: function initialized() {
onInitialized && onInitialized();
},
connected: function connected() {
onConnected && onConnected();
},
disconnected: function disconnected() {
onDisconnected && onDisconnected();
},
rejected: function rejected() {
onRejected && onRejected();
}
});
},
disconnectFromChannel: function disconnectFromChannel() {
if (this.cable) {
this.props.cable.subscriptions.remove(this.cable);
this.cable = null;
}
},
componentDidUpdate: function componentDidUpdate(prevProps) {
if (JSON.stringify(prevProps.channel) !== JSON.stringify(this.props.channel)) {
this.disconnectFromChannel();
this.connectToChannel();
}
},
componentWillUnmount: function componentWillUnmount() {
this.disconnectFromChannel();
},
send: function send(data) {
if (!this.cable) {
throw new Error("ActionCable component unloaded");
}

this.cable.send(data);
},
perform: function perform(action, data) {
if (!this.cable) {
throw new Error("ActionCable component unloaded");
}

this.cable.perform(action, data);
},
render: function render() {
return this.props.children || null;
}
});
ActionCableController.displayName = "ActionCableController";
ActionCableController.propTypes = {
cable: PropTypes.object,
onReceived: PropTypes.func,
onInitialized: PropTypes.func,
onConnected: PropTypes.func,
onDisconnected: PropTypes.func,
onRejected: PropTypes.func,
children: PropTypes.any
};
var Component = createReactClass({
displayName: "Component",
render: function render() {
var _this = this;

return React.createElement(Consumer, null, function (_ref) {
var cable = _ref.cable;
return React.createElement(ActionCableController, _objectSpread(_objectSpread({
cable: cable
}, _this.props), {}, {
ref: _this.props.forwardedRef
}), _this.props.children || null);
});
}
});
Component.displayName = "ActionCableConsumer";
Component.propTypes = {
onReceived: PropTypes.func,
onInitialized: PropTypes.func,
onConnected: PropTypes.func,
onDisconnected: PropTypes.func,
onRejected: PropTypes.func,
children: PropTypes.any
};
var ActionCableConsumer = React.forwardRef(function (props, ref) {
return React.createElement(Component, _objectSpread(_objectSpread({}, props), {}, {
forwardedRef: ref
}), props.children || null);
});
var ActionCable = createReactClass({
displayName: "ActionCable",
componentDidMount: function componentDidMount() {
console.warn("DEPRECATION WARNING: The <ActionCable /> component has been deprecated and will be removed in a future release. Use <ActionCableConsumer /> instead.");
},
render: function render() {
return React.createElement(ActionCableConsumer, _objectSpread({}, this.props), this.props.children || null);
}
});
ActionCable.displayName = "ActionCable";
ActionCable.propTypes = {
onReceived: PropTypes.func,
onInitialized: PropTypes.func,
onConnected: PropTypes.func,
onDisconnected: PropTypes.func,
onRejected: PropTypes.func,
children: PropTypes.any
};
exports.ActionCable = ActionCable;
exports.ActionCableConsumer = ActionCableConsumer;
exports.ActionCableController = ActionCableController;
exports.ActionCableProvider = ActionCableProvider; // Compatible old usage

exports["default"] = ActionCableProvider;
73 changes: 43 additions & 30 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ var createReactClass = require("create-react-class")
var { Provider, Consumer } = React.createContext()

var ActionCableProvider = createReactClass({
componentWillMount: function () {
UNSAFE_componentWillMount: function () {
if (this.props.cable) {
this.cable = this.props.cable
} else {
Expand All @@ -25,7 +25,7 @@ var ActionCableProvider = createReactClass({
}
},

componentWillReceiveProps: function (nextProps) {
UNSAFE_componentWillReceiveProps: function (nextProps) {
// Props not changed
if (
this.props.cable === nextProps.cable &&
Expand All @@ -38,7 +38,7 @@ var ActionCableProvider = createReactClass({
this.componentWillUnmount()

// create or assign cable
this.componentWillMount()
this.UNSAFE_componentWillMount()
},

render: function () {
Expand All @@ -64,6 +64,9 @@ ActionCableProvider.propTypes = {

var ActionCableController = createReactClass({
componentDidMount: function () {
this.connectToChannel()
},
connectToChannel: function() {
var self = this
var _props = this.props

Expand Down Expand Up @@ -95,13 +98,23 @@ var ActionCableController = createReactClass({
}
})
},

componentWillUnmount: function () {
disconnectFromChannel: function() {
if (this.cable) {
this.props.cable.subscriptions.remove(this.cable)
this.cable = null
}
},
componentDidUpdate: function(prevProps) {
if (
JSON.stringify(prevProps.channel) !== JSON.stringify(this.props.channel)
) {
this.disconnectFromChannel()
this.connectToChannel()
}
},
componentWillUnmount: function () {
this.disconnectFromChannel()
},

send: function (data) {
if (!this.cable) {
Expand Down Expand Up @@ -136,34 +149,34 @@ ActionCableController.propTypes = {
children: PropTypes.any
}

var ActionCableConsumer = React.forwardRef(function (props, ref) {
var Component = createReactClass({
render: function () {
return React.createElement(Consumer, null, ({ cable }) => {
return React.createElement(
ActionCableController,
{
cable,
...this.props,
ref: this.props.forwardedRef
},
this.props.children || null
)
})
}
})
var Component = createReactClass({
render: function () {
return React.createElement(Consumer, null, ({ cable }) => {
return React.createElement(
ActionCableController,
{
cable,
...this.props,
ref: this.props.forwardedRef
},
this.props.children || null
)
})
}
})

Component.displayName = "ActionCableConsumer"
Component.displayName = "ActionCableConsumer"

Component.propTypes = {
onReceived: PropTypes.func,
onInitialized: PropTypes.func,
onConnected: PropTypes.func,
onDisconnected: PropTypes.func,
onRejected: PropTypes.func,
children: PropTypes.any
}
Component.propTypes = {
onReceived: PropTypes.func,
onInitialized: PropTypes.func,
onConnected: PropTypes.func,
onDisconnected: PropTypes.func,
onRejected: PropTypes.func,
children: PropTypes.any
}

var ActionCableConsumer = React.forwardRef(function (props, ref) {
return React.createElement(
Component,
{
Expand Down
Loading